如何在Perl中捕获所有量化的正则表达式匹配?
如果如何在Perl中捕获所有量化的正则表达式匹配?,perl,Perl,如果regex是一个正则表达式,我可以像这样捕获它的两个重复: if (/(regex)(regex)/) { print $1; print $2; } my $string = "barfaafeebarbarfiifoo"; my @matches = ( $string =~ /f../g ); for my $match ( @matches ) { say "$match"; } 但这是糟糕的Perl,因为应该使用{2}量词,而糟糕的通用编程风格是重复代
regex
是一个正则表达式,我可以像这样捕获它的两个重复:
if (/(regex)(regex)/) {
print $1;
print $2;
}
my $string = "barfaafeebarbarfiifoo";
my @matches = ( $string =~ /f../g );
for my $match ( @matches ) {
say "$match";
}
但这是糟糕的Perl,因为应该使用{2}
量词,而糟糕的通用编程风格是重复代码。所以我想这样做:
if (/(regex){2}/) {
print $1;
print $2;
}
但这不起作用,只有第一个匹配的指纹
有没有一种方法可以同时打印两个匹配项而不重复代码?您到底想实现什么?您可以打印匹配的整个零件:
if (/((regex){2})/) {
print $1;
}
或者您可以尝试在和/g
期间多次使用进行匹配<代码>\G
将确保匹配之间没有字符
while (/\G(regex)/g) {
print $1;
}
你到底想达到什么目的?您可以打印匹配的整个零件:
if (/((regex){2})/) {
print $1;
}
或者您可以尝试在和/g
期间多次使用进行匹配<代码>\G
将确保匹配之间没有字符
while (/\G(regex)/g) {
print $1;
}
你到底想达到什么目的?您可以打印匹配的整个零件:
if (/((regex){2})/) {
print $1;
}
或者您可以尝试在和/g
期间多次使用进行匹配<代码>\G
将确保匹配之间没有字符
while (/\G(regex)/g) {
print $1;
}
你到底想达到什么目的?您可以打印匹配的整个零件:
if (/((regex){2})/) {
print $1;
}
或者您可以尝试在和/g
期间多次使用进行匹配<代码>\G
将确保匹配之间没有字符
while (/\G(regex)/g) {
print $1;
}
如果您不关心哪个正则表达式匹配,则可以通过这种方式将多个正则表达式连接在一起:
if ( $s =~ m!(regexp1|regexp2|regexp3)! ){
print "found $1\n";
}
如果你真的关心哪一个匹配,我会这样做:
foreach my $r ( 'regexp1','regexp2'){
if ( $s =~ m!$r! ){
print "$r matched: found $1 in $s\n";
}
}
如果您不关心哪个正则表达式匹配,则可以通过这种方式将多个正则表达式连接在一起:
if ( $s =~ m!(regexp1|regexp2|regexp3)! ){
print "found $1\n";
}
如果你真的关心哪一个匹配,我会这样做:
foreach my $r ( 'regexp1','regexp2'){
if ( $s =~ m!$r! ){
print "$r matched: found $1 in $s\n";
}
}
如果您不关心哪个正则表达式匹配,则可以通过这种方式将多个正则表达式连接在一起:
if ( $s =~ m!(regexp1|regexp2|regexp3)! ){
print "found $1\n";
}
如果你真的关心哪一个匹配,我会这样做:
foreach my $r ( 'regexp1','regexp2'){
if ( $s =~ m!$r! ){
print "$r matched: found $1 in $s\n";
}
}
如果您不关心哪个正则表达式匹配,则可以通过这种方式将多个正则表达式连接在一起:
if ( $s =~ m!(regexp1|regexp2|regexp3)! ){
print "found $1\n";
}
如果你真的关心哪一个匹配,我会这样做:
foreach my $r ( 'regexp1','regexp2'){
if ( $s =~ m!$r! ){
print "$r matched: found $1 in $s\n";
}
}
您需要在整个表达式(包括量词)周围加上括号,如/((regex){2})/
。但是,由于不需要内部捕获,因此最好使用非捕获括号(?:…)
,这样代码看起来就像
if ( /((?:regex){2})/ ) {
print $1;
}
您需要在整个表达式(包括量词)周围加上括号,如/((regex){2})/
。但是,由于不需要内部捕获,因此最好使用非捕获括号(?:…)
,这样代码看起来就像
if ( /((?:regex){2})/ ) {
print $1;
}
您需要在整个表达式(包括量词)周围加上括号,如/((regex){2})/
。但是,由于不需要内部捕获,因此最好使用非捕获括号(?:…)
,这样代码看起来就像
if ( /((?:regex){2})/ ) {
print $1;
}
您需要在整个表达式(包括量词)周围加上括号,如/((regex){2})/
。但是,由于不需要内部捕获,因此最好使用非捕获括号(?:…)
,这样代码看起来就像
if ( /((?:regex){2})/ ) {
print $1;
}
我想在Perl中多次匹配正则表达式并打印所有匹配项
这不是你的程序正在做的。您的程序所做的是无论regex
是什么,它必须是连续两次。{..}
用于指定您想要某物的次数:
if ( $string =~ /a{2,3}/ ) {
say "The string '$string' has two or three 'a' in a row";
}
然而,您似乎要问的是,每次$regex
都是在字符串中出现的。您可以将匹配项保存在如下数组中:
if (/(regex)(regex)/) {
print $1;
print $2;
}
my $string = "barfaafeebarbarfiifoo";
my @matches = ( $string =~ /f../g );
for my $match ( @matches ) {
say "$match";
}
这将打印出:
faa
fee
fii
foo
如果正则表达式/f../
没有匹配项,则不会打印任何内容。我可以通过查看@matches
的标量值并查看它是否大于零来测试是否发生了匹配
注意:在本例中,我需要正则表达式末尾的g
我想在Perl中多次匹配正则表达式并打印所有匹配项
这不是你的程序正在做的。您的程序所做的是无论regex
是什么,它必须是连续两次。{..}
用于指定您想要某物的次数:
if ( $string =~ /a{2,3}/ ) {
say "The string '$string' has two or three 'a' in a row";
}
然而,您似乎要问的是,每次$regex
都是在字符串中出现的。您可以将匹配项保存在如下数组中:
if (/(regex)(regex)/) {
print $1;
print $2;
}
my $string = "barfaafeebarbarfiifoo";
my @matches = ( $string =~ /f../g );
for my $match ( @matches ) {
say "$match";
}
这将打印出:
faa
fee
fii
foo
如果正则表达式/f../
没有匹配项,则不会打印任何内容。我可以通过查看@matches
的标量值并查看它是否大于零来测试是否发生了匹配
注意:在本例中,我需要正则表达式末尾的g
我想在Perl中多次匹配正则表达式并打印所有匹配项
这不是你的程序正在做的。您的程序所做的是无论regex
是什么,它必须是连续两次。{..}
用于指定您想要某物的次数:
if ( $string =~ /a{2,3}/ ) {
say "The string '$string' has two or three 'a' in a row";
}
然而,您似乎要问的是,每次$regex
都是在字符串中出现的。您可以将匹配项保存在如下数组中:
if (/(regex)(regex)/) {
print $1;
print $2;
}
my $string = "barfaafeebarbarfiifoo";
my @matches = ( $string =~ /f../g );
for my $match ( @matches ) {
say "$match";
}
这将打印出:
faa
fee
fii
foo
如果正则表达式/f../
没有匹配项,则不会打印任何内容。我可以通过查看@matches
的标量值并查看它是否大于零来测试是否发生了匹配
注意:在本例中,我需要正则表达式末尾的g
我想在Perl中多次匹配正则表达式并打印所有匹配项
这不是你的程序正在做的。您的程序所做的是无论regex
是什么,它必须是连续两次。{..}
用于指定您想要某物的次数:
if ( $string =~ /a{2,3}/ ) {
say "The string '$string' has two or three 'a' in a row";
}
然而,您似乎要问的是,每次$regex
都是在字符串中出现的。你可以保存比赛