我一直试图在替换操作数的正则表达式:Perl正则表达式中的圆括号是做什么的?
$str =~ s/^0+(.)/$1/;
转换0000到0,0001至1
$str =~ s/^0+./$1/;
转换0000到空字符串,000100 00,0001100〜100。
什么区别是括号做什么?
我一直试图在替换操作数的正则表达式:Perl正则表达式中的圆括号是做什么的?
$str =~ s/^0+(.)/$1/;
转换0000到0,0001至1
$str =~ s/^0+./$1/;
转换0000到空字符串,000100 00,0001100〜100。
什么区别是括号做什么?
这似乎对我有点不当 - 你需要()来确定你的匹配。
http://perldoc.perl.org/perlre.html
捕捉缓冲器
的包围结构(...) 创建捕获缓冲器。要引用 缓冲以后 ,相同的图案内的当前内容,等等使用\ 1 用于第一,\ 2表示第二,和 。在比赛之外使用“$” 而不是“\”。 (该\符号 作品在某些情况下,外 比赛。可以看看下面的 \ 1比$ 1的细节的警告。)回 参考本场比赛的另一部分被称为 反向引用。
所以基本上你可以使用
if ($str =~ /^0+(.)/) { print "matched $1"; }
如果你有一个以上的分组比赛,他们将是$ 1,$ 2,$ 3 ...等如
if ($str =~ /(0*)(1*)/) { print "I've got $1 and $2"; }
在第一次表达的情况下,$ 1 具有匹配的模式。
在第二表现形式的情况下,存在 不会$ 1个变量,因为它 不具有任何
分组。
+1现在了解 – 2010-03-13 05:45:55
如果你想获得的$ 1或 $ 2您需要组 正则表达式的模式值。如果没有 分组,如果你想获得的价值, 它会显示错误信息,如果您 使用下面的语句。
use strict;
use warnings;
在第二份声明,如果使用 $ 1变量不进行分组。那么 那个时候$ 1的值将为 为空。所以它会将匹配的 值替换为空。
另一方面,替换可能更清晰地写成's/^ 0 +(?=。)//'使用前瞻断言而不是捕获。 – hobbs 2010-03-13 05:40:41
您可以尝试通过_Learning Perl_获取基础知识。 :) – 2010-03-17 03:07:50
@brian肯定感谢 – 2010-03-17 03:59:25