【问题标题】:Java RegEx lookbehind constructionJava RegEx 后视构造
【发布时间】:2014-03-06 21:40:46
【问题描述】:

需要一点帮助来构造这个场景的正则表达式:

内容:

<b>IfThisIsPresent:</b>
<span style="font-family:Arial">
<button type='submit'>
<span class="button-gradient">
<span class="button-test">
Look: NeedToExtractThat
</span>

所以: 如果字符串IfThisIsPresent: 在我的字符串中,我应该提取Look: 字符串之后的内容。

我开发了以下 RegEx,但它不起作用:

((?<=IfThisIsPresent:)Look:(.*))

我知道 Java Pattern 类不支持 if then else。所以我使用lookbehind来检查IfThisIsPresent是否存在,然后提取Look:之后的内容。

有人可以帮忙吗?

赞赏!

【问题讨论】:

    标签: java regex lookahead lookbehind


    【解决方案1】:

    这个正则表达式应该适合你:

    (?s)(?<=IfThisIsPresent:.{0,1000}Look:).*
    

    它适合我:

    NeedToExtractThat </span>
    

    如果您还想摆脱 &lt;/span&gt; 这样的标签,那么您可以使用这个正则表达式:

    (?s)(?<=IfThisIsPresent:.{0,1000}Look:)[^<]*
    

    匹配的:

    NeedToExtractThat
    

    在此处查看演示:http://fiddle.re/8ez1h(单击 java 按钮)

    【讨论】:

    • 只是更复杂一点:相反的是什么?我的意思是,如果存在Look:,我想提取IfThisIsPresent 后面的内容?这里的问题是我必须先搜索Look:,它位于字符串的末尾,然后回到开头搜索IfThisIsPresent 并获取组。你能给我一盏灯吗?我相信我会使用前瞻而不是后视,但我的测试并不幸运.. :/。非常感谢!
    • 我已经走了这么远:(?s).(?=.*Look:)IfThisIsPresent:(.*)[^&lt;],但它并没有停止在 &lt; 使用表达式 [^&lt;]
    • 我想我明白了:(?s).(?=.*Look:)IfThisIsPresent:(.*?[^&lt;]*)
    • 反之亦然:(?s)(?=.*Look:)IfThisIsPresent:[^&lt;]*您的问题现在解决了吗?
    【解决方案2】:

    我相信这应该可以解决问题:

    (?=.*IfThisIsPresent:).*?Look:(.*)
    

    【讨论】:

    • 会试试的,谢谢。知道为什么?&lt;= 不起作用吗?我想了解为什么我的正则表达式不起作用:/
    • (?&lt;=IfThisIsPresent:).*?Look:(.*) 也应该可以工作。您需要在“看:”之前允许字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多