2012-09-25 1 views
0

저는 HTML 구문 분석기를 사용하고 있지만 attriburte id = "optout"가없는 앵커를 선택하려면 정규식이 필요합니다. 다음은 http로 href가있는 모든 앵커를 선택하는 현재 정규식입니다. 위대한 것은 id = "optout"인 앵커를 무시하면됩니다 - 어떤 아이디어입니까? 감사합니다.특정 ID가있는 href를 선택하지 않는 Coldfusion 정규식

<cfset matches = ReMatch('<a[^>]*href="http[^"]*"[^>]*>(.+?)</a>', arguments.htmlCode) /> 
+0

_ "나는 HTML 파서가 열심히 일하는 "_ - 그리고 쉬운 작업을 위해 계속 사용하십시오! –

+0

내가 처음에 링크를 선택하도록 cf를 설정해야합니다 ... :( – user1431633

+0

다음은 거의 틀림없이 설정을 잘못한 것입니다 .HTML 파서는이 작업을 위해 명시 적으로 설계되었습니다. 정규 표현은 원래 [정규] (http : //en.wikipedia.org/wiki/Regular_language) 패턴 일치와 현대의 비정규 정규식조차도 HTML 구문 분석의 복잡성에 적합하지 않습니다. –

답변

2

정규식은이 작업을위한 잘못된 도구이며, 이미 HTML 파서가 관련되어 있으므로 계속 사용하지 않을 이유가 없습니다. 여기

jsoup.parse(Arguments.HtmlCode).select('a:not([id=optout])') 

을 할 수있는 훨씬 적은 유지 보수 정규식 방법은 다음과 같습니다 :

다음은 HTML 파서와 함께 할 수있는 사소한 방법 (jsoup가)의

rematch('(?i)<a\s*(?:(?!id\s*=\s*[''"]optout[''"])[^>])+>(?:[^<]+|<(?!/a>))+</a>' , Arguments.HtmlCode)