【问题标题】:RegEx to match a string not containing a specific HTML tag正则表达式匹配不包含特定 HTML 标记的字符串
【发布时间】:2013-07-16 04:05:13
【问题描述】:

我想使用正则表达式来查找两个标签之间的内容,如下所示:

<br />@ This is the content.</li>

到目前为止,我一直在使用:

<br />@(.*?)</li>

内容有时包含&lt;li&gt;tag,这不是我要查找的。所以现在我想修改我的搜索,例如不包含&lt;li&gt; tagmatch &lt;br /&gt;@(.*?)&lt;/li&gt;

然后我尝试:&lt;br /&gt;@([^&lt;li&gt;].*?)&lt;/li&gt;,但这仍然在其搜索中包含&lt;li&gt;

你能给我一点帮助吗?谢谢你。 (注意,我使用 TextWrangler)

【问题讨论】:

  • 我不确定您使用的正则表达式的风格,但看起来,您需要的是非贪婪匹配 ([^&lt;]*)。请注意,在您提到字符的字符类中,如果您认为 [^&lt;li&gt;] 与“不包含
  • ”相同,则不是!,如果适合,您可以尝试否定前瞻。

标签: regex wildcard


【解决方案1】:

说明

这个表达式将:

  • 查找以&lt;br /&gt; 开头并以下一个&lt;/li&gt; 结尾的子字符串
  • 验证子字符串不包含&lt;li&gt;
  • 捕获上面定义的开始和结束标记之间的文本

&lt;br\s*\/&gt;(@(?:(?!&lt;li&gt;).)*?)&lt;\/li&gt;

示例

示例文本

实时示例:http://www.rubular.com/r/CIledJX54O

注意第一行有不好的条件

<br />@ Don't <li>find me.</li>
<br />@ This is the content.</li>
<br />@ more desired content.</li>

捕获组

[0] => Array
    (
        [0] => <br />@ This is the content.</li>
        [1] => <br />@ more desired content.</li>
    )

[1] => Array
    (
        [0] => @ This is the content.
        [1] => @ more desired content.
    )

【讨论】:

  • 非常感谢您的帮助。这确实有帮助,但它会导致 out of stack space 错误,从而使正则表达式停止工作。
  • 您能否发布您如何使用表达式和一些重现错误的示例文本?
  • 这是我的文本示例 [1]:dl.dropboxusercontent.com/u/15034088/Others/Temps/sample.txt。它适用于单次搜索,但因Find allReplace all (堆栈空间不足)而失败[2):dl.dropboxusercontent.com/u/15034088/Others/Temps/…
  • 我怀疑这可以按设计工作,但问题出在 TextWrangler 工具中。您的示例文本没有任何不包含&lt;li&gt;&lt;br /&gt;@...&lt;/li&gt; 字符串。像rubular.com/r/aKKLJ2X92h 这样的在线测试工具表明该表达式可以正常工作。您可以将第一行匹配移动到文本字符串的末尾以验证它是否搜索整个文本。
  • 查看更新后的rubular.com/r/nnRWUTsjgG。您必须向下滚动才能查看突出显示匹配项的位置,并在页面底部显示捕获组 1。此工具的作用相同 regexr.com?35jmt,您必须向下滚动才能找到蓝色突出显示并将鼠标悬停在他们可以查看为什么匹配的详细信息。
【解决方案2】:

为什么这个正则表达式不起作用:

#<a[^>]+href\s*=\s*(["\'])(.*?)\1[^>]*>((?:(?!</a).)*?)Domain#msi

我正在尝试查找在其链接文本中包含“域”字符串的所有链接。它将匹配所需的以及包含“&lt;/a”的代码部分。

例如会匹配:

<a href="/new-domains">New Domain

还有

<a href="/domains/url-email-forwarding">URL & Email Forwarding</a></ul></div><!--/.navigation--></div></div></li><li><a href="/hosting">Hosting</a><div><div><div class="navigation"><h1>Premium Domain

当我将“域”替换为“&lt;/a”时,它将正确匹配所有链接。但是为什么它不适用于“域”?!

完全神秘..

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签