2

在 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://')]

如何使用正则表达式查找 url?

(http://|https://|ftp://)([a-z0-9]{1})((\.[a-z0-9-])|([a-z0-9-]))*\.([a-z]{2,4})(\/?)
4

1 回答 1

0

如果您的 XPath 引擎支持 XPath 2.0,请使用fn:matches哪些等价fn:contains的正则表达式。XPath 1.0 不支持正则表达式。

//LITERAL[fn:matches(@tokenValue, '(http://|https://|ftp://)([a-z0-9]{1})((\.[a-z0-9-])|([a-z0-9-]))*\.([a-z]{2,4})(/?)')]

将返回所有-tag 与您的正则表达式匹配<LITERAL/>的-tag。@tokenValue

您的表达式存在一些问题,您不必(也可能不会)/在最后一个匹配组中转义。我在查询中解决了这个问题。为什么你仍然使用最后两个匹配组?

于 2013-01-23T14:07:36.277 回答