RegEx匹配不包含特定HTML标记的字符串

时间:2013-07-16 04:05:14

标签: regex wildcard

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

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

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

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

内容有时包含<li>标记,这不是我想要查找的内容。所以现在我想修改我的搜索,例如不包含match <br />@(.*?)</li>的{​​{1}}。

然后我尝试:<li> tag,但在搜索中仍然包含<br />@([^<li>].*?)</li>

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

2 个答案:

答案 0 :(得分:5)

描述

此表达式将:

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

<br\s*\/>(@(?:(?!<li>).)*?)<\/li>

enter image description here

实施例

示例文字

直播示例: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.
    )

答案 1 :(得分:0)

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

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

我正在尝试查找链接文本中包含“Domain”字符串的所有链接。它将匹配所需的代码以及包含“</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

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

总神秘......