我坚定地使用正则表达式。我下面的正则表达式匹配所有我想:正则表达式匹配任何其他正则表达式不匹配
很长 - 对不起。它用于解析任意对象的格式字符串。它使我能够指定一个属性(例如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'不会帮助我。 –