假设我有变量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