返回 "or" 管道到结果的奇怪正则表达式捕获组行为
Strange Regex Capture Group behavior returning "or" pipes into result
我正在尝试为 find/replace 后缀创建一个捕获组。
请看这里的例子:
https://www.myregextester.com/?r=b23e74dc
我的总结如下:
正则表达式:
(\b(.*?)(logical|logic))
请求的输出:
- 0=\0
- 1=\1
- 2=\2
但是我测试的捕获组的输出 return “|”结果似乎有些冗余
输出:
- 0=气象
- 1=气象
- 2=Meteoro0=|气象
- 1=|气象
- 2=|流星
显然我在正则表达式中引入了一些错误,因为我不想要“|”在输出中,但我不清楚它可能是什么。
您可以使用否定模式 [^|]*
来匹配管道以外的任何内容:
(\b([^|]*)(logic(?:al)?))
或者您也可以使用 \w
:
(\b(\w*)(logic(?:al)?))
你应该把它放出来,这样你才能看到。
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_] )
)
)
希望这对您有所帮助。
我正在尝试为 find/replace 后缀创建一个捕获组。
请看这里的例子:
https://www.myregextester.com/?r=b23e74dc
我的总结如下:
正则表达式:
(\b(.*?)(logical|logic))
请求的输出:
- 0=\0
- 1=\1
- 2=\2
但是我测试的捕获组的输出 return “|”结果似乎有些冗余
输出:
- 0=气象
- 1=气象
- 2=Meteoro0=|气象
- 1=|气象
- 2=|流星
显然我在正则表达式中引入了一些错误,因为我不想要“|”在输出中,但我不清楚它可能是什么。
您可以使用否定模式 [^|]*
来匹配管道以外的任何内容:
(\b([^|]*)(logic(?:al)?))
或者您也可以使用 \w
:
(\b(\w*)(logic(?:al)?))
你应该把它放出来,这样你才能看到。
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_] )
)
)
希望这对您有所帮助。