如何将字符串与可选部分匹配?

时间:2009-10-12 10:56:28

标签: regex

我们需要使用正则表达式解析一个字符串,字符串可以是:

  1. XXXX
  2. 出现问题
  3. XXXX出现问题,以前的失败是YYY
  4. XXX可以是任何字符(例如“。”)

    我们如何制作匹配的正则表达式:

    1. XXXX
    2. “,以前的失败是YYY”(记得可以选择)
    3. 我尝试过的每一个正则表达式都会在第一场比赛中捕获所有内容(因为贪婪或太少因为不贪心)

      我知道这是进步,但也许有人已经做到了。

2 个答案:

答案 0 :(得分:6)

^There was a problem at (.*?)(?:, previous failures were (.*))?$

(.*?)表示匹配所有内容,但匹配尽可能少以使此匹配匹配。 ^$锚点强制正则表达式跨越整行,以便它始终匹配。

编辑:如果你真的想要周围的错误文本,而不仅仅是“XXX”和“YYY”,那么请使用以下正则表达式:

^There was a problem at (.*?)(, previous failures were .*)?$

编辑2 :根据XXX的格式,您可以使用以下内容,但前提是“XXX”中没有逗号。不幸的是,除此之外,你需要至少使用$锚来确保非贪婪的匹配符合某些东西。正如您在问题中所述,使用贪婪匹配根本不是一种选择(至少使用.)。

There was a problem at ([^,]*)(, previous failures were .*)?

答案 1 :(得分:2)

Perl,Java,Python,.NET,JavaScript等兼容的正则表达式可能

^There was a problem at (.*?)(, previous failures were .*)?$

如果我理解你的问题。如果您需要代码示例,请提供更多详细信息。