如何匹配,但不捕获,正则表达式的一部分?

我有一个字符串列表。其中一些是123 -… 456的形式。可变部分“…”可以是:

>字符串“apple”后跟一个连字符,例如。 123-apple-456
>字符串“banana”,后跟连字符,例如。 123-banana-456
>空白字符串,例如123-456(注意只有一个连字符)

除“apple”或“banana”之外的任何字词都无效。

对于这三种情况,我想分别匹配“苹果”,“香蕉”和“”。注意,我不想捕获连字符,但我总是想匹配它。如果字符串不是如上所述的形式123 -… 456,则根本没有匹配。

我如何写一个正则表达式来做到这一点?假设我有一种风味,允许lookahead,lookbehind,lookaround和非捕获组。

这里的关键观察是,当你有“苹果”或“香蕉”,你也必须有结尾连字符,但你不想匹配它。当您匹配空白字符串时,您不能使用尾随连字符。封装这个断言的正则表达式将是正确的,我想。

唯一不捕获东西的方法是使用look-around assertions

(?<=123-)((apple|banana)(?=-456)|(?=456))

因为即使使用non-capturing groups (?:…),整​​个正则表达式捕获它们匹配的内容。但是这个正则表达式只匹配苹果或香蕉,如果它前面有123-和后面的-456,或者它匹配空字符串,如果前面有123-和后面的456。

http://stackoverflow.com/questions/3926451/how-to-match-but-not-capture-part-of-a-regex

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何匹配,但不捕获,正则表达式的一部分?