【问题标题】:Why this regex assertion doesn't match?为什么这个正则表达式断言不匹配?
【发布时间】:2014-05-14 08:06:32
【问题描述】:

我正在尝试只在 html 标记之间预置内容,我正在尝试这个简单的断言模式,但我不明白为什么它与这个字符串不匹配。

<a href=http://url.com title="link">this is a ling</a>

(?<=<a.*>)([ \w]*)(?=<.*\/a>)

Debuggex Demo

【问题讨论】:

    标签: regex assertions


    【解决方案1】:

    debuggex(PCRE、Javascript 和 Python)上的 Lookbehinds 不能具有可变宽度,这意味着您可以使用具有固定宽度(3 个字符)的 (?&lt;=&lt;a&gt;),但不能使用长度可变的 (?&lt;=&lt;a.*&gt;)(可以有3 个字符,或 4 个,或 5 个等)。

    正则表达式根本无效,但调试表达式告诉您没有匹配项。

    【讨论】:

    • 我明白了。我必须找到另一种方法来做到这一点。感谢您的回答。
    • @user3491049 你应该可以使用&lt;a.*?&gt;([ \w]*)&lt;.*?\/a&gt; 之类的东西,因为无论如何你都会得到一个捕获组。或者,如果您可以拥有锚点\K,那么您也许可以使用&lt;a.*?&gt;\K([ \w]*)(?=&lt;.*?\/a&gt;)。尽管如此,如果您正在解析 HTML,您应该使用正确的 HTML 解析器。
    • @Jerry 在这种情况下,a 标签可以/不应该嵌套(假设 HTML 有效),所以基本的 RegEx 应该没问题。
    • @tenub 够公平的。我只是建议一般的 HTML 解析:)
    • 此答案已添加到 Stack Overflow Regular Expression FAQ 的“Lookarounds”下。
    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多