Perl正则表达式中的括号有什么作用?

时间:2010-03-13 05:24:38

标签: regex perl

我一直在替换运算符中尝试几个正则表达式:

$str =~ s/^0+(.)/$1/;

将0000转换为0,将0001转换为1

$str =~ s/^0+./$1/;

将0000转换为空字符串,000100转换为00,0001100至100。

圆括号有什么区别?

3 个答案:

答案 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变量,因为它   没有任何

     

分组。