substring()函数用于从字符串中提取指定位置的子串,索引从1开始,常与substring-before()、substring-after()结合处理固定格式文本,适用于结构化字符串提取,而正则表达式更适合复杂模式匹配。
XPath的
substring()
substring()
substring()
substring(string, start, length)
string
text()
start
length
substring()
start
一些例子:
提取从某个位置开始到结尾的子串: 假设我们有一个字符串 "Hello World!",我们想提取 "World!"。
substring("Hello World!", 7)
这里,'H'是第1位,'e'是第2位,以此类推,空格是第6位,'W'是第7位。所以从第7位开始提取,一直到字符串末尾。
提取指定长度的子串: 从 "Hello World!" 中提取 "Hello"。
substring("Hello World!", 1, 5)
从第1位开始,提取5个字符。
结合节点文本提取: 假设XML中有一个
<data>2023-10-26</data>
substring(/data/text(), 1, 4)
或者,如果只想提取月份 "10":
substring(/data/text(), 6, 2)
我的经验是,当你需要处理的字符串结构相对固定,或者可以通过简单的位置计算就能确定要截取的部分时,
substring()
substring()
说实话,用
substring()
substring("ABCD", 1, 2)
substring("ABCD", 2, 2)
另一个需要注意的点是,如果你的
start
length
substring()
substring("Hello", 10)
substring("Hello", 3, 10)
string-length()
substring()
substring()
substring-before()
substring-after()
举个例子,假设我们有这样的文本:
订单号: ORD-1234567890 状态: 已完成
ORD-1234567890
substring()
substring-after(., '订单号: ')
ORD-1234567890 状态: 已完成
substring-before(., ' 状态:')
ORD-1234567890
所以,完整的XPath表达式可能是:
substring-before(substring-after(/some/node/text(), '订单号: '), ' 状态:')
这看起来有点绕,但确实是解决这类问题的常用手段。 再比如,如果你想从一个URL中提取域名,而这个URL的格式不总是那么规整,但你知道它总是在
//
/
substring-before(substring-after(., '//'), '/')
www.example.com
关键在于,
substring()
substring-before()
substring-after()
substring()
这是一个很有意思的对比。从我的经验来看,
substring()
substring()
substring()
substring(., 1, 4)
substring()
substring()
substring()
substring-before()
substring-after()
正则表达式的优势与适用场景:
matches()
replace()
tokenize()
substring()
总结来说:
如果你面对的是结构化、位置固定、长度可预测的字符串,或者只需要基于简单的分隔符进行截取,那么
substring()
但如果你的字符串是半结构化、模式复杂、长度可变,或者需要进行复杂的校验和提取,那么正则表达式的强大功能就显得不可或缺了。在XPath 2.0+的环境下,这两种工具可以相辅相成,共同解决更广泛的字符串处理问题。我的看法是,没有绝对的好坏,只有是否适合当前任务。能用简单的方法解决,就别把问题复杂化;但遇到复杂问题,也别害怕引入更强大的工具。
以上就是XPath的substring()函数如何提取子字符串?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号