假設我有變量Perl的正則表達式的問題
$x1 = 'XX a b XX c d XX';
$x2 = 'XX a b XX c d XX e f XX';
我想一個正則表達式,將發現的XX之間的信件每個實例。我正在尋找一個通用的解決方案,因爲我不知道有多少個XX。
我試過使用/XX(.*?)XX/g,但這隻匹配x1和ab的「ab」和x2的「ef」,因爲一旦找到第一個匹配,引擎就已經讀取了第二個「XX」。
感謝您的任何幫助。
/XX(.*?)(?=XX)/
假設我有變量Perl的正則表達式的問題
$x1 = 'XX a b XX c d XX';
$x2 = 'XX a b XX c d XX e f XX';
我想一個正則表達式,將發現的XX之間的信件每個實例。我正在尋找一個通用的解決方案,因爲我不知道有多少個XX。
我試過使用/XX(.*?)XX/g,但這隻匹配x1和ab的「ab」和x2的「ef」,因爲一旦找到第一個匹配,引擎就已經讀取了第二個「XX」。
感謝您的任何幫助。
/XX(.*?)(?=XX)/
嘗試
$stuff_between_xx = split /XX/, $x1;
my $x2 = 'XX a b XX c d XX e f XX';
my @parts = grep { $_ ne '' } split /\s*XX\s*/, $x2;
我建議拆分以及knittl。但是,您可能要刪除的空白,以及:
my @stuff = split /\s*XX\s*/, $line;
你也能使用向前看符號,但你真的不需要它們,因爲你可以用相當複雜的交替,以及:
非-ws版本也只是:
my @stuff = $line =~ m/XX((?:[^X]|X[^X])*)/g;
的交替說,如果它沒有再接再你如果不是一個'X'
帶走任何東西 - 但你會採取。將會有一個前瞻角色,但它可以積極消耗角色,而不會回溯。
修剪版本將不得不退回空格字符,所以表達更醜。
my @stuff = $line =~ m/XX\s*((?:[^X]|X[^X])*?(?:[^X\s]|X[^X]))/g;
美麗,謝謝! – itzy 2010-06-16 14:23:47