我一直在替换运算符中尝试几个正则表达式:
$str =~ s/^0+(.)/$1/;
将0000转换为0,将0001转换为1
$str =~ s/^0+./$1/;
将0000转换为空字符串,000100转换为00,0001100至100。
圆括号有什么区别?
答案 0 :(得分:2)
这似乎对我有点误用 - 你需要()来识别你的匹配。
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 :(得分:2)
如果你想获得1美元或者1美元的价值 您需要$ 2对模式进行分组 正则表达式。没有 分组如果你想获得价值, 它会显示错误信息,如果你 使用以下声明。
use strict;
use warnings;
在第二个声明中,如果您使用 没有分组的$ 1变量。所以 那个时候价值1美元 空。所以它将取代匹配的 价值变为空。
答案 2 :(得分:0)
如果是第一次表达,则为$ 1 有匹配的模式。
如果是第二个表达,那里 不会是$ 1变量,因为它 没有任何
分组。