【问题标题】:Regex to stop matching when either of two words show up当两个单词中的任何一个出现时,正则表达式停止匹配
【发布时间】:2016-01-29 23:03:45
【问题描述】:

当出现“目录”或“标签”这两个词中的任何一个时,我想停止捕获。

文本案例1:

"...input job: dentist directory job: hygenist </tag>"

文本案例2:

"...input job: dentist</tag>"

牙医是我想要捕捉的。所以基本上我希望正则表达式在“输入作业:”之后开始匹配,并在字符串中出现&lt;/tag&gt;directory 时停止匹配。这是因为&lt;/tag&gt;directory 将始终出现在dentist 之后。

我尝试了很多不同的方法。我最接近的是这个(开始匹配并且没有达到结束情况):

(?<=input job: )(\D*)(?= directory| <\/tag>)

如果我只使用其中一种最终情况,则满足文本情况 1:

(?<=input job: )(\D*)(?= directory)

如果我只使用另一种情况,那么 Text case 2 就可以满足:

(?<=input job: )(\D*)(?= <\/tag>)

但是,我想涵盖这两种情况。我认为放置 or 条件(“|”)会起作用,但事实并非如此。

【问题讨论】:

  • 这不是一个代码或正则表达式编写服务,您可以在其中发布您的需求,然后有人会制作出符合他们的东西 您自己做了哪些尝试来解决这个问题?请edit 包含您最近所做的努力,并解释它如何没有按您的预期工作。当你这样做时,添加一个标签来指示你正在使用的正则表达式引擎,因为它们之间存在主要的功能和语法差异。
  • @KenWhite 很抱歉没有展示我的尝试,我试图让帖子尽可能清晰。
  • @gp_sflover 我同意,我需要在社区中更加活跃。

标签: regex string-matching


【解决方案1】:

好的,我的问题是我没有使用惰性量词*?(匹配尽可能少的字符)。我使用了一个贪婪的量词*(匹配尽可能多的字符)。所以我尝试的一切都没有达到预期的效果。以下工作完美:

(?<=input job:)(\D*?)(?=directory|<\/tag>)

它将抓取input job: 之后的所有内容,并在到达directory&lt;/tag&gt; 时停止

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多