返回 "or" 管道到结果的奇怪正则表达式捕获组行为

Strange Regex Capture Group behavior returning "or" pipes into result

我正在尝试为 find/replace 后缀创建一个捕获组。

请看这里的例子:

https://www.myregextester.com/?r=b23e74dc

我的总结如下:

正则表达式:

(\b(.*?)(logical|logic))

请求的输出:

但是我测试的捕获组的输出 return “|”结果似乎有些冗余

输出:

显然我在正则表达式中引入了一些错误,因为我不想要“|”在输出中,但我不清楚它可能是什么。

您可以使用否定模式 [^|]* 来匹配管道以外的任何内容:

(\b([^|]*)(logic(?:al)?))

或者您也可以使用 \w

(\b(\w*)(logic(?:al)?))

RegEx Demo

你应该把它放出来,这样你才能看到。

Meteorologic|Meteorological


0=Meteorologic
1=Meteorologic
2=Meteoro
0=|Meteorological
1=|Meteorological
2=|Meteoro

首场比赛结束Meteorologic|气象

第二场比赛开始 Meteorologic|Meteorological

c|之间是一个单词边界,所以满足\b

然后 .*? (捕获组 2)匹配 |Meteoro 直到合乎逻辑。

然后 logical 在捕获组 3 中。

所以,它会按照您的要求进行操作。


修正

要让词边界偏向右边找词,只需要引入一个
像这样向前看 (\b(?=\w)(.*?)(logical|logic))


关于单词边界的注意事项:它们是灵巧的。

相当于

 (?:
      (?:
           ^ 
        |  (?<= [^a-zA-Z0-9_] )
      )
      (?= [a-zA-Z0-9_] )
   |  
      (?<= [a-zA-Z0-9_] )
      (?:
           $ 
        |  (?= [^a-zA-Z0-9_] )
      )
 )

希望这对您有所帮助。