2012-01-21 122 views
1

我试图捕捉delimitered值,如列表:正则表达式:如何捕获正则表达式捕获组的所有匹配值并重复?

abc, def, ghi 

理想情况下,我得到的“ABC”的列表,“高清”,“GHI”,同时验证该在同一时间输入。

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

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

,当我读到的claim说:

现在,在拍摄组的重复中,它是 不可能在匹配的重复列表中匹配他们单独匹配的内容 。

  1. 这是真的吗?

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

+1

是的,它是真实的,但解决方案取决于什么语言你的编码。请让我们知道。在Perl中,你可以通过编写'my @tokens =“abc,def,ghi”=〜/ [^,] +/g;' – Borodin

+0

@Borodin是正确的,有办法做到这一点,语言。 – jcollado

回答

1

你可以使用split

的Perl

#!/usr/bin/perl 
use Modern::Perl; 
use Data::Dump qw(dump); 

my @list = split/,\s*/, $str; 
[email protected]; 

输出:

("abc", "def", "ghi") 

如果你想使用正则表达式:

#!/usr/bin/perl 
use Modern::Perl; 
use Data::Dump qw(dump); 

my $str = "abc, def, ghi"; 
my @list = $str =~ /[^, ]+/g; 
[email protected]; 

给出相同的输出。

PHP

$str = "abc, def, ghi"; 
$list = preg_split('/[, ]+/', $str); 
print_r($list); 

preg_match_all('/[^, ]+/', $str, $list); 
print_r($list);