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