正则表达式:如何通过重复捕获正则表达式捕获组的所有匹配值?

时间:2012-01-21 09:08:01

标签: regex

我正在尝试捕获分隔符的值列表,例如:

abc, def, ghi

理想情况下,我会在同时验证输入的同时获得“abc”,“def”,“ghi”列表。

我一直在尝试使用这样的正则表达式:

^([^,]*)(?:, *([^,]+))*$

当我读到claim时:

  

现在,当重复使用捕获组时,它就是   不可能在列表中单独确定他们匹配的内容   匹配重复。

  1. 这是真的吗?

  2. 如果是这样,如何正确捕获值?我必须手动将它们分成几块,然后对它们运行正则表达式以验证每个单独的值吗?

1 个答案:

答案 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);
相关问题