Perl REGEX:非捕获组似乎不起作用

Perl REGEX: non-capturing group seems not to be working

我有这个 bash 语句和 perl 正则表达式:

echo  | perl -pe 's|(?:://).+?(?:/)|b|'

打印这个:

httpbTesting/JS/displayName.js

来自这个:

http://php2-mindaugasb.c9.io/Testing/JS/displayName.js

我期待:

http://b/Testing/JS/displayName.js

可能我对非捕获组不太了解?我认为它们应该匹配,但不能捕获(比如正面前瞻和后视相结合)。我错了吗?

你应该使用:

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

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

或使用lookarounds并避免捕获组:

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