我們有我們需要使用正則表達式解析字符串,字符串可能是兩種:如何匹配字符串與可選部分?
- 有在XXXX問題
- 有在XXXX一個問題,以前的失敗是YYY
的XXX可以是任何字符(如 「」)
我們怎樣才能使正則表達式將匹配:
- XXXX
- 「以前的失敗是YYY」(記得可選配)
每一個正則表達式,我試圖在第一場比賽的一切捕獲(因爲貪婪或過少,因爲不貪)
我知道這是先進的,但也許有人已經做到了。
我們有我們需要使用正則表達式解析字符串,字符串可能是兩種:如何匹配字符串與可選部分?
的XXX可以是任何字符(如 「」)
我們怎樣才能使正則表達式將匹配:
每一個正則表達式,我試圖在第一場比賽的一切捕獲(因爲貪婪或過少,因爲不貪)
我知道這是先進的,但也許有人已經做到了。
^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 .*)?
爲什麼讓第二個括號不捕獲?他確實想要匹配周圍的文字。 – 2009-10-12 11:05:35
由於第三個parens **是**捕獲,但我懷疑他關心靜態錯誤文本。 – 2009-10-12 11:08:44
好吧,我只是重讀這個問題,重讀你寫的和實際理解的內容。編輯,但我仍然認爲這是一個比他實際想要/需要更多的錯誤交流。 – 2009-10-12 11:21:18
一個Perl,使用Java,Python,.NET,JAVASCRIPT等兼容的正則表達式可能是
^There was a problem at (.*?)(, previous failures were .*)?$
,如果我正確地理解你的問題。如果您需要代碼示例,請提供更多詳細信息。
哪個正則表達式?哪種語言 ? – 2009-10-12 10:59:36
請參閱我的編輯瞭解更多。 – 2009-10-12 20:56:26