2013-01-23 3 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을 찾는 방법은 무엇입니까? 당신의 XPath 엔진의 XPath 2.0을 지원하는 경우

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

답변

0

, 정규 표현식에 대한 fn:contains을 등가물 fn:matches 사용합니다. XPath 1.0에서는 정규식을 지원하지 않습니다.

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

는 정규 표현식을 일치하는 @tokenValue -tag을 가진 모든 <LITERAL/> -tags를 반환합니다.

표현에 약간의 문제가 있습니다. 마지막 일치 그룹에서 /을 탈출 할 필요는 없습니다. 내 질문에 그걸 고쳤어. 어쨌든 마지막 두 경기 그룹을 왜 사용하고 있습니까?

+0

정규식이 준비되었습니다. 불행히도 패치 2.0은 지원되지 않으므로 링크를 찾아야합니다. '// LITERAL [contains (@tokenValue, 'http : // a')]' '// LITERAL [contains (@tokenValue, http : // b ')]' '// 리터럴 [@tokenValue,'http : // c ')] 등 Tnank You – Vladimir

관련 문제