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;