加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:34:48 所属栏目:百科 来源:网络整理
导读:我有一个字符串列表。其中一些是123 -… 456的形式。可变部分“…”可以是: 字符串“apple”后跟一个连字符,例如。 123-apple-456 字符串“banana”,后跟连字符,例如。 123-banana-456 空白字符串,例如123-456(注意只有一个连字符) 除“apple”或“bana
我有一个字符串列表。其中一些是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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读