Regex 正则表达式查找/替换在第一个字后停止

Regex 正则表达式查找/替换在第一个字后停止,regex,shell,Regex,Shell,如果我为全局设置了\g,为什么字符串中只有一个“the”被替换 sed -E 's/(^|_)(the|an|is)(_|$)/\1/g' <<< "the_the_river" = the_river sed-E的/(^ | | | | | | is)(| |$)/\1/g'如前所述,问题是后者被消耗掉了。为了避免重叠匹配,您需要或。不能在您的案例中使用诸如\或某些版本的\b之类的单词边界,因为下划线属于单词字符 替代方案可以是使用支持环视的PCRE的 perl -pe '

如果我为全局设置了\g,为什么字符串中只有一个“the”被替换

sed -E 's/(^|_)(the|an|is)(_|$)/\1/g' <<< "the_the_river"
= the_river

sed-E的/(^ | | | | | | is)(| |$)/\1/g'如前所述,问题是后者被消耗掉了。为了避免重叠匹配,您需要或。不能在您的案例中使用诸如
\
或某些版本的
\b
之类的单词边界,因为下划线属于单词字符

替代方案可以是使用支持环视的PCRE的

perl -pe 's/(?<![^_])(?:the|an|is)(?:_|$)//g' <<< "the_the_river"

perl-pe的/(?因为第二个
\uu
在第一次迭代中被消耗。啊,我明白了,有没有办法在正则表达式中解决这个问题,或者我必须求助于循环?为什么要用
\1
替换呢?试试
sed-E的/| an | is)//g'@UnderrableLightness我想牛顿也想测试单词边界。备选方案:
echo“the_the_river”| perl-pe的/(?