如何使用XPath正则表达式匹配URL

时间:2013-01-23 13:23:41

标签: regex xpath

需要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})(\/?)

1 个答案:

答案 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。我在我的查询中修复了它。你为什么还要使用最后两个匹配组?