$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/)
答案 0 :(得分:0)
使用零宽度断言来匹配要匹配的部分之前和之后的内容,而不是尝试使用匹配组执行此操作。这样,您只匹配该部分,全局匹配将返回所有出现的数组。
my @eachTopic = ($content =~ /(?<=<p><strong>).*?(?=<\/p>)/g);
答案 1 :(得分:-1)
你试过拆分吗?
像这样:my @topics = map{ $_ =~ s/<\/p>$//; $_ }split( /<p><strong>/, $txt );
如果您的字符串在某些时候包含<p><strong>...</p>
以外的其他内容,那当然会失败...