我有perl regex的这个bash语句:
echo $1 | perl -pe 's|(?:://).+?(?:/)|b|'
打印出来:
httpbTesting/JS/displayName.js
来自:
http://php2-mindaugasb.c9.io/Testing/JS/displayName.js
我在期待:
http://b/Testing/JS/displayName.js
也许我对非捕获群体一无所知?我认为它们应该匹配,但不能捕捉(就像一个积极的前瞻和后面的组合)。我错了吗?
答案 0 :(得分:5)
您应该使用:
perl -pe 's|(//).+?(/)|$1b$2|'
非捕获组并不意味着输入文本不会被消费。非捕获括号将正则表达式分组,因此您可以应用正则表达式运算符,但不捕获任何内容。
或使用 lookarounds 并避免捕获群组:
echo "$1" | perl -pe 's|(?<=://).+?(?=/)|b|'
http://b/Testing/JS/displayName.js