2013-01-23 32 views
2

需要XPath幫助。我有這樣一個XML:如何使用XPath正則表達式匹配URL

<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> 

我需要找到該URL。我這樣做。

//LITERAL[contains(@tokenValue, 'http://')] 

如何使用正則表達式來查找url?

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

回答

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})(/?)')] 

將返回所有<LITERAL/>標籤都有效具有@tokenValue - 標籤符合正則表達式。

您的表情存在一些問題,您不必(也不可以)在最後一個匹配組中跳過/。我解決了這個問題。爲什麼你最後使用了兩個比賽組?

+0

正則表達式已發現就緒。不幸的是,補丁2.0不支持,那麼將不得不尋找這樣的鏈接,所以我們不得不尋找這樣的鏈接,以便使用LITERAL [包含(@tokenValue,'包含(@tokenValue,'http:// a')]' ' http:// b')]' '// LITERAL [包含(@tokenValue,'http:// c')]' 等 Tnank You – Vladimir