regex - Perl 正则表达式 : non-capturing group seems not to be working

标签 regex bash perl

我有这个带有 perl 正则表达式的 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

也许我不明白关于非捕获组的一些事情?我认为它们应该匹配,但不捕获(就像积极的向前看和向后看的组合)。我是不是搞错了?

最佳答案

您应该使用:

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

非捕获组并不意味着输入文本不会被使用。非捕获括号对正则表达式进行分组,以便您可以应用正则表达式运算符,但不捕获任何内容。

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

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

关于regex - Perl 正则表达式 : non-capturing group seems not to be working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866240/

相关文章:

java - 仅在 Java 字符串搜索中查找整个单词

linux - AWK 根据 B 列的唯一性计算 A 列的出现次数

perl - 从 perl 脚本发送 html 格式的邮件

perl - 使用 Perl 进行格式化输出的最佳方式

Ruby正则表达式方法!~

Java 正则表达式 : How to match all patterns including overlapping regex matches?

c# - 如何从长描述字段中提取联系电话?

linux - 编写持久的 perl 脚本

ruby - 中间人问我是否要在开始新项目时使用 compass

perl - 获取面向对象 Perl 中的问题