2012-01-21 121 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);