我有一个HTML解析器正在努力工作,但我需要一个正则表达式来选择没有attriburte id =“optout”的锚点。这是我当前的正则表达式,选择所有具有http的href的锚...这很好,只需要忽略那些id =“optout”的锚点 - 任何想法? 谢谢!
<cfset matches = ReMatch('<a[^>]*href="http[^"]*"[^>]*>(.+?)</a>', arguments.htmlCode) />
答案 0 :(得分:2)
正则表达式是完成此任务的错误工具,并且鉴于您已经涉及到HTML解析器,因此没有理由不继续使用它!
以下是使用HTML解析器(jsoup)执行此操作的简单方法:
jsoup.parse( Arguments.HtmlCode ).select('a:not([id=optout])')
这是一种远不那么可维护的正则表达方式:
rematch( '(?i)<a\s*(?:(?!id\s*=\s*[''"]optout[''"])[^>])+>(?:[^<]+|<(?!/a>))+</a>' , Arguments.HtmlCode )