到目前为止,我有这个:
(?<="rec_rec_three": ").*(?=")
适用于
时"rec_rec_three": "tini-bikini-martini"
给了我
tini-bikini-martini
但我的目标是用_替换all -'s ...我该如何完成它?
答案 0 :(得分:0)
如果你的正则表达式支持\ K和\ G,那么使用像
这样的表达式很容易做到这样的替代's/(\G|"rec_rec_three": ")[^"]*?\K-/_/g
\G
表示对前一个匹配结尾的引用,\K
将当前匹配的有效开头设置为它发生的位置。
注意(至少在Perl中)这应该是给定字符串变量的第一个匹配操作。否则,\ G可以从前一个继承。 (有关详细信息,请参阅http://www.regular-expressions.info/continue.html)
一个简单的测试:
> cat testfile
"rec_rec_three": "tini-bikini-martini"
"rec_rec_one": "tini-bikini-martini" "rec_rec_two": "tini-bikini-martini" "rec_rec_three": "tini-bikini-martini" "rec_rec_four": "tini-bikini-martini"
> cat testfile | perl -n -e 's/(\G|"rec_rec_three": ")[^"]*?\K-/_/g;print'
"rec_rec_three": "tini_bikini_martini"
"rec_rec_one": "tini-bikini-martini" "rec_rec_two": "tini-bikini-martini" "rec_rec_three": "tini_bikini_martini" "rec_rec_four": "tini-bikini-martini"