正则表达式:用前缀捕获替换字符串(给定前缀除外)

标签 regex regex-negation

我想替换一个字符串,保留前缀,除非它包含特定的前缀。

例如,任何类似 "(*)-bar" 的字符串都必须替换为 "(*)-blah",除非 "(*) " 匹配 "baz":

foo-bar => should return foo-blah 
baz-bar => should remain baz-bar

到目前为止,我最好的做法是在替换时修剪前缀的最后一个字母:

echo "foo-bar" | sed s/"[^(baz)]-bar"/$1-blah/

最佳答案

使用负向回顾:

s/(?<!baz)-bar/-blah/

大多数 sed 实现没有这种高级正则表达式功能,但它应该可以在更现代的语言中工作,例如 perl。

关于正则表达式:用前缀捕获替换字符串(给定前缀除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277918/

相关文章:

php - preg_match_all() 不匹配所有可能出现的情况

JavaScript 正则表达式用于匹配字符串化数组中不包含搜索词的项目

java - 字符串中单词之间额外空格的正则表达式条件

regex - 如何设置不匹配的REGEX?

java - Java 中的正则表达式 - 解析字符串数组

javascript - 如何将 CSS 类的索引与 JavaScript 匹配?

regex - 删除新行,除非前面有特定字符集

.net - 正则表达式匹配除两个单词之外的任何内容

python - 使用 WTForms 和 python 进行正则表达式验证

python - 将一个正则表达式转换为另一个正则表达式