【发布时间】:2014-05-14 08:06:32
【问题描述】:
我正在尝试只在 html 标记之间预置内容,我正在尝试这个简单的断言模式,但我不明白为什么它与这个字符串不匹配。
<a href=http://url.com title="link">this is a ling</a>
(?<=<a.*>)([ \w]*)(?=<.*\/a>)
【问题讨论】:
标签: regex assertions
我正在尝试只在 html 标记之间预置内容,我正在尝试这个简单的断言模式,但我不明白为什么它与这个字符串不匹配。
<a href=http://url.com title="link">this is a ling</a>
(?<=<a.*>)([ \w]*)(?=<.*\/a>)
【问题讨论】:
标签: regex assertions
debuggex(PCRE、Javascript 和 Python)上的 Lookbehinds 不能具有可变宽度,这意味着您可以使用具有固定宽度(3 个字符)的 (?<=<a>),但不能使用长度可变的 (?<=<a.*>)(可以有3 个字符,或 4 个,或 5 个等)。
正则表达式根本无效,但调试表达式告诉您没有匹配项。
【讨论】:
<a.*?>([ \w]*)<.*?\/a> 之类的东西,因为无论如何你都会得到一个捕获组。或者,如果您可以拥有锚点\K,那么您也许可以使用<a.*?>\K([ \w]*)(?=<.*?\/a>)。尽管如此,如果您正在解析 HTML,您应该使用正确的 HTML 解析器。
a 标签可以/不应该嵌套(假设 HTML 有效),所以基本的 RegEx 应该没问题。