Regex 正则表达式查找/替换在第一个字后停止
如果我为全局设置了\g,为什么字符串中只有一个“the”被替换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 '
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的/(?