2009-10-12 66 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 .*)?$ 

,如果我正確地理解你的問題。如果您需要代碼示例,請提供更多詳細信息。