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

Ran*_*itz 0 regex

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

  1. XXXX出现问题
  2. 在XXXX有一个问题,以前的失败是YYY

XXX可以是任何字符(例如".")

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

  1. XXXX
  2. ",之前的失败是YYY"(记住可以是可选的)

我试过的每一个正则表达式都在第一场比赛中捕获了所有内容(因为贪婪或太少因为不贪心)

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

Mat*_*ley 6

^There was a problem at (.*?)(?:, previous failures were (.*))?$
Run Code Online (Sandbox Code Playgroud)

(.*?)意味着匹配所有内容,但尽可能少地匹配以使此匹配匹配.在^$锚迫使正则表达式来跨越整条生产线,使其总是一致的东西.

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

^There was a problem at (.*?)(, previous failures were .*)?$
Run Code Online (Sandbox Code Playgroud)

编辑2:根据XXX的格式,您可以使用以下内容,但前提是"XXX"中没有逗号.不幸的是,除此之外,你需要至少$锚点以确保非贪婪的比赛能够匹配.正如您在问题中所述,使用贪婪匹配根本不是一个选项(使用.至少时).

There was a problem at ([^,]*)(, previous failures were .*)?
Run Code Online (Sandbox Code Playgroud)