Regex Perl验证正则表达式和循环捕获
我需要验证像“[1.2.3]”这样的字符串,其中标题以“.”分隔,必须至少有一个标题。每个标题都需要提取。有没有办法在一个循环中实现这一点,或者必须是两个独立的步骤Regex Perl验证正则表达式和循环捕获,regex,perl,validation,Regex,Perl,Validation,我需要验证像“[1.2.3]”这样的字符串,其中标题以“.”分隔,必须至少有一个标题。每个标题都需要提取。有没有办法在一个循环中实现这一点,或者必须是两个独立的步骤 use strict; use warnings; my @tests = ("[one]", "[two.three.four]"); foreach (@tests) { while ($_ =~ /^\[(\w+)(?:\.\w+)*\]$/) { print "$1\n"; }
use strict;
use warnings;
my @tests = ("[one]", "[two.three.four]");
foreach (@tests) {
while ($_ =~ /^\[(\w+)(?:\.\w+)*\]$/) {
print "$1\n";
}
print "\n\n\n";
}
是的,将验证和提取分开是有意义的:
my ($titles) = $input =~ /^\[((?:\w+|\b\.\b)+)\]\z/
or die "invalid input $input.\n";
my @title = split /\./, $titles;
虽然您可以一次完成所有操作,但我认为可读性受到影响:
my @title = split /\./, ( $input =~ /^\[((?:\w+|\b\.\b)+)\]\z/ )[0] // ''
or die "invalid input $input.\n";
完全没有想到split()。所以基本上使用正则表达式来验证格式和允许的字符,然后为每个组分割。