2009-10-12 47 views
0

我们有我们需要使用正则表达式解析字符串,字符串可能是两种:如何匹配字符串与可选部分?

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

的XXX可以是任何字符(如 “”)

我们怎样才能使正则表达式将匹配:

  1. XXXX
  2. “以前的失败是YYY”(记得可选配)

每一个正则表达式,我试图在第一场比赛的一切捕获(因为贪婪或过少,因为不贪)

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

+3

哪个正则表达式?哪种语言 ? – 2009-10-12 10:59:36

+0

请参阅我的编辑了解更多。 – 2009-10-12 20:56:26

回答

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

为什么让第二个括号不捕获?他确实想要匹配周围的文字。 – 2009-10-12 11:05:35

+0

由于第三个parens **是**捕获,但我怀疑他关心静态错误文本。 – 2009-10-12 11:08:44

+0

好吧,我只是重读这个问题,重读你写的和实际理解的内容。编辑,但我仍然认为这是一个比他实际想要/需要更多的错误交流。 – 2009-10-12 11:21:18

2

一个Perl,使用Java,Python,.NET,JAVASCRIPT等兼容的正则表达式可能是

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

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