匹配不含特定HTML标记的字符串的正则表达式

3

我想使用正则表达式来查找两个标签之间的内容,就像这样:

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

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

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

内容有时包含
  • 标签,而这不是我想要查找的。因此,现在我想修改我的搜索,例如匹配不包含
  • 标签的match <br />@(.*?)</li>

    然后我尝试��<br />@([^<li>].*?)</li>,但这仍然包括

  • 在其搜索中。

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


  • 我不确定你使用的正则表达式类型,但看起来你需要的是一个非贪婪匹配([^<]*)。请注意,在字符类中,你只能列出字符,如果你认为[^<li>]等同于“不包含<li>”,那是错误的!如果适合的话,你可以尝试使用负向前瞻。 - Ani
    2个回答

    6

    描述

    该表达式将执行以下操作:

    • 找到以<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.
        )
    

    非常感谢您的帮助。这确实有所帮助,但它会导致“堆栈空间不足”错误,从而停止正则表达式的工作。 - Niamh Doyle
    你能否发布一下你如何使用这个表达式以及一些重现错误的示例文本? - Ro Yo Mi
    以下是我文本的样例[1]:https://dl.dropboxusercontent.com/u/15034088/Others/Temps/sample.txt。它可以使用单个搜索,但在“查找所有”和“替换所有”时失败(出现堆栈空间不足)[2]: https://dl.dropboxusercontent.com/u/15034088/Others/Temps/stack_error.png - Niamh Doyle
    请查看更新后的http://www.rubular.com/r/nnRWUTsjgG。您需要向下滚动以查看它正在突出显示您的匹配项,而在页面底部它显示捕获组1。此工具与http://regexr.com?35jmt执行相同的操作,您需要向下滚动以查找蓝色高亮显示,并悬停在其上以查看有关为什么会匹配的详细信息。 - Ro Yo Mi
    我猜问题可能与TextWrangler有关。我在Mac上习惯使用TextWrangler。好的,我将尝试在Windows上使用Notepad++来看看是否有效。尽管现在已经停滞不前,但我非常感谢你的帮助,并将把它作为答案接受。非常感谢。 - Niamh Doyle
    显示剩余2条评论

    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
    

    当我将“Domain”替换为“</a”时,它将正确匹配所有链接。但是为什么它不能与“Domain”一起使用?!

    完全的谜团...


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接