需要XPath的帮助。我有这样的XML:
<unaryExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<postfixExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<leftHandSideExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<newExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<memberExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<primaryExpression tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<literal tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<stringLiteral tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8">
<LITERAL tokenValue="'http://google.com'" tokenLine="1" tokenColumn="8"/>
</stringLiteral>
</literal>
</primaryExpression>
</memberExpression>
</newExpression>
</leftHandSideExpression>
</postfixExpression>
</unaryExpression>
我需要找到这个网址。我是这样做的。
//LITERAL[contains(@tokenValue, 'http://')]
如何使用正则表达式查找网址?
(http://|https://|ftp://)([a-z0-9]{1})((\.[a-z0-9-])|([a-z0-9-]))*\.([a-z]{2,4})(\/?)
答案 0 :(得分:0)
如果您的XPath引擎支持XPath 2.0,请使用等效fn:matches
的{{1}}作为正则表达式。使用XPath 1.0,不支持正则表达式。
fn:contains
将返回所有//LITERAL[fn:matches(@tokenValue, '(http://|https://|ftp://)([a-z0-9]{1})((\.[a-z0-9-])|([a-z0-9-]))*\.([a-z]{2,4})(/?)')]
- 标记<LITERAL/>
- 与正则表达式匹配的标记。
您的表达式存在一些问题,您不必(也可能不)转义最后一个匹配组中的@tokenValue
。我在我的查询中修复了它。你为什么还要使用最后两个匹配组?