Regexp查找具有优先级顺序但捕获的组相同的匹配项

cpjpxq1n  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(97)

我有一个相同的问题,但在链接PCRE2(regex101.com):
Regexp find a match with priority order?
我有:

/.*?(hello)|.*?(hey)|.*?(hi)/ms

hi hey hello

但问题是,当它找到hello时,它被存储在组1中,当它在组2中找到hey时,当它在组3中找到hi时,我希望只使用组1。
我该怎么得到这个?
https://regex101.com/r/bc8XQE/1

kadbb459

kadbb4591#

使用PCRE,而不是3个不同的组,您可以使用您的模式与3个替代方案,然后使用\K忘记到目前为止匹配的内容。
字边界\b防止部分字匹配。

.*?\K\bhello\b|.*?\K\bhey\b|.*?\K\bhi\b

请参见regex demo
如果你真的必须有组1,那么你可以使用分支重置组:

(?|.*?\b(hello)\b|.*?\b(hey)\b|.*?\b(hi)\b)

另见regex demo

相关问题