我正在尝试捕获分隔符的值列表,例如:
abc, def, ghi
理想情况下,我会在同时验证输入的同时获得“abc”,“def”,“ghi”列表。
我一直在尝试使用这样的正则表达式:
^([^,]*)(?:, *([^,]+))*$
当我读到claim时:
现在,当重复使用捕获组时,它就是 不可能在列表中单独确定他们匹配的内容 匹配重复。
这是真的吗?
如果是这样,如何正确捕获值?我必须手动将它们分成几块,然后对它们运行正则表达式以验证每个单独的值吗?
答案 0 :(得分:1)
您可以使用split
:
<强>的Perl 强>
#!/usr/bin/perl
use Modern::Perl;
use Data::Dump qw(dump);
my @list = split/,\s*/, $str;
dump@list;
<强>输出:强>
("abc", "def", "ghi")
如果你想使用正则表达式:
#!/usr/bin/perl
use Modern::Perl;
use Data::Dump qw(dump);
my $str = "abc, def, ghi";
my @list = $str =~ /[^, ]+/g;
dump@list;
给出相同的输出。
<强> PHP 强>
$str = "abc, def, ghi";
$list = preg_split('/[, ]+/', $str);
print_r($list);
或
preg_match_all('/[^, ]+/', $str, $list);
print_r($list);