我有一些數據,我在Perl中解析,並且將在不久的將來添加更多不同格式的數據。我想要做的是編寫一個易於使用的函數,我可以傳遞一個字符串和一個正則表達式,並且它會在圓括號中返回任何東西。它的工作是這樣的(僞):在Perl中匹配n個圓括號正則表達式
sub parse {
$data = shift;
$regex = shift;
$data =~ eval ("m/$regex/")
foreach $x ($1...$n)
{
push (@ra, $x);
}
return \@ra;
}
然後,我可以這樣稱呼它:
@subs = parse ($data, '^"([0-9]+)",([^:]*):(\W+):([A-Z]{3}[0-9]{5}),ID=([0-9]+)');
正如你可以看到,有一對夫婦的與此代碼的問題。我不知道eval是否會起作用,'foreach'肯定不起作用,不知道有多少個括號,我不知道要循環多少次。
這對於分割太複雜了,所以如果還有其他功能或可能性,我可以忽略,請告訴我。
感謝您的幫助!
如果你不知道這個正則表達式是否有parens,並且如果它不是(默認的整個匹配的字符串)而不想返回任何東西,可以添加一個額外的集合:'$ string =〜/(regex)/'並從結果中丟棄它。 – ysth 2010-06-18 01:30:54
grep會過濾出實際上在匹配中沒有使用的parens,但是不會是零長度的(這將被定義和「」) – ysth 2010-06-18 01:32:19
@ysth =>你是對的,修復。 – 2010-06-18 13:17:45