正则表达式组匹配,返回第n个匹配并分配给数组

时间:2014-11-15 22:16:08

标签: regex perl

$content = "<p><strong>haha</p> .. .. .. <p><strong> hihi </p>";
my @eachTopic = ($content =~ /(<p><strong>)(.*?)(<\/p>)/g);
#I only want to capture the $2 and add it to array

print $_."\n" foreach(@eachTopic);

结果数组应该有2个值$ eachTopic [0] =&#34;哈哈&#34;和$ eachTopic [1] =&#34; hihi&#34;。

我知道我可以使用for循环并使用if语句来做这个,但只是想知道,正则表达式中有什么东西我可以做类似的事情

@arr = ($content =~ /(x)(.*?)(x)/g$2/) 

2 个答案:

答案 0 :(得分:0)

使用零宽度断言来匹配要匹配的部分之前和之后的内容,而不是尝试使用匹配组执行此操作。这样,您只匹配该部分,全局匹配将返回所有出现的数组。

my @eachTopic = ($content =~ /(?<=<p><strong>).*?(?=<\/p>)/g);

答案 1 :(得分:-1)

你试过拆分吗?

像这样:

my @topics = map{  $_ =~ s/<\/p>$//; $_ }split( /<p><strong>/, $txt );

如果您的字符串在某些时候包含<p><strong>...</p>以外的其他内容,那当然会失败...