Perl REGEX:非捕获组似乎无法正常工作

时间:2015-01-09 17:46:21

标签: regex bash perl

我有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

也许我对非捕获群体一无所知?我认为它们应该匹配,但不能捕捉(就像一个积极的前瞻和后面的组合)。我错了吗?

1 个答案:

答案 0 :(得分:5)

您应该使用:

perl -pe 's|(//).+?(/)|$1b$2|'

非捕获组并不意味着输入文本不会被消费。非捕获括号将正则表达式分组,因此您可以应用正则表达式运算符,但不捕获任何内容。

或使用 lookarounds 并避免捕获群组:

echo "$1" | perl -pe 's|(?<=://).+?(?=/)|b|'
http://b/Testing/JS/displayName.js