Regex Perl正则表达式中的括号做什么?

Regex Perl正则表达式中的括号做什么?,regex,perl,Regex,Perl,我在替换运算符中尝试了几个正则表达式: $str =~ s/^0+(.)/$1/; 将0000转换为0,将0001转换为1 $str =~ s/^0+./$1/; 将0000转换为空字符串,000100转换为00,0001100转换为100 括号有什么区别 如果是第一个表达式,则$1 有匹配的模式 如果是第二个表达式,则有 不会是$1变量,因为它 没有 分组 这对我来说似乎有点误用-您需要()来确定您的匹配项 捕获缓冲区 括号结构(…) 创建捕获缓冲区。指 缓冲区的当前内容稍后将被删除 在

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

$str =~ s/^0+(.)/$1/;
将0000转换为0,将0001转换为1

$str =~ s/^0+./$1/;
将0000转换为空字符串,000100转换为00,0001100转换为100

括号有什么区别

如果是第一个表达式,则$1 有匹配的模式

如果是第二个表达式,则有 不会是$1变量,因为它 没有

分组


这对我来说似乎有点误用-您需要()来确定您的匹配项

捕获缓冲区

括号结构(…) 创建捕获缓冲区。指 缓冲区的当前内容稍后将被删除 在上,在同一模式中,使用\1 对于第一个、\2对于第二个,以及 等等。在匹配之外使用“$” 而不是“\”。(使用\符号 在外部的某些情况下工作 比赛。请参阅下面的警告 \1美元对1美元的详细信息。)返回 比赛的另一部分叫做 回溯

所以基本上你可以使用

if ($str =~ /^0+(.)/) { print "matched $1"; }
如果您有多个分组匹配项,它们将是$1、$2、$3。。。等等

if($str=~/(0*)(1*)/){打印“我有$1和$2”}

如果您想在$1或$2中获得价值 $2您需要将图案分组 正则表达式。没有 分组如果要获取值, 如果您需要,它将显示错误消息 使用以下语句

在第二个语句中,如果使用 没有分组的$1变量。所以 到那时,1美元的价值将是 空的。因此,它将替换匹配的 将值转换为空


另一方面,使用前瞻性断言而不是捕获,可以更清楚地编写替换内容。
s/^0+(?=)//
。您可以尝试通过学习Perl来学习基本知识。:)
use strict;
use warnings;