我堅定地使用正則表達式。我下面的正則表達式匹配所有我想:正則表達式匹配任何其他正則表達式不匹配
很長 - 對不起。它用於解析任意對象的格式字符串。它使我能夠指定一個屬性(例如IntValue)並將可選的子格式轉發給它。
它相匹配的#
接着任選的非捕獲圖案?:
,接着任選的「選項」圖案(?r)
或(?a-r)
。然後是屬性名稱後跟一對[]
。
對於以下輸入:
Int: #IntValue Bool: #BoolValue[]Word Str: '#StrValue' Double: #DoubleValue[#.00] #(?r)Bar[#(?r)StrValue[#Length]]
它匹配:
- #IntValue
- #BoolValue []
- #StrValue
- #DoubleValue [#00 ]
- #(?r)Bar [#(?r)StrValue [#Length]]
好。
但現在我需要所有其他的東西。我希望它在同一個正則表達式中能夠對所有匹配進行foreach(我可以通過檢查id
或plain
是否具有捕獲來決定是否有這種情況)。
默認模式做的就是:((?!<regex that matches what you want>).)*
在我的情況下,將看起來像(圖案:<REG>|(?<plain>(?:(?!<REG>).)+)
) 什麼resuls在那巨大的正則表達式(whitch maches完美):
Puh。它做它應該但是...
是否有任何其他方式來匹配所有不匹配的先前的正則表達式部分?
這是明確的嗎?
爲什麼不只是'!regex.IsMatch(input);'? – Rob
看起來沒有辦法,除非你想嘗試PCRE.net,在那裏你可以使用PCRE'(* SKIP)(* F)'動詞。不過,這將是一個漫長的正則表達式。也許,你可以匹配第一種類型的子串,然後使用它們來分割剩下的東西?因爲我解析了一個字符串,所以@Rob是 –
。我需要所有的部分。有些部件符合我的財產模式。但現在我需要所有其他的東西。 'Regex.IsMatch'只會檢查是否匹配。是的,有多個匹配。整個字符串將被匹配。 'regex.IsMatch'不會幫助我。 –