【问题标题】:How to match URL using XPath regular expressions如何使用 XPath 正则表达式匹配 URL
【发布时间】:2013-01-23 13:23:41
【问题描述】:

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

【问题讨论】:

    标签: regex xpath


    【解决方案1】:

    如果您的 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})(/?)')]
    

    将返回所有&lt;LITERAL/&gt;-tags 与您的正则表达式匹配的@tokenValue-tags。

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

    【讨论】:

    • 发现正则表达式已准备就绪。不幸的是,不支持补丁 2.0,然后将不得不寻找链接,所以 //LITERAL[contains(@tokenValue, 'http://a')] //LITERAL[contains(@tokenValue, 'http://b')] //LITERAL[contains(@tokenValue, 'http://c')] 等。Tnank 你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多