我试图将括号内的内容放入img标签中src属性的值:
while(<TOCFILE>)
{
$toc_line = $_;
$toc_line =~ s/<inlineFig.*?(\.\.\/pics\/ch09_inline99_*?\.jpg)*?<\/inlineFig>/<img src="${1}" alt="" \/\>/g;
$new_toc_file .= $toc_line;
}
所以我希望在输出中看到这样的标签:
<img src="../pics/ch09_inline99_00" alt="" />
但是相反,我得到了:
<img src="" alt="" />
最佳答案
您的正则表达式中有一个错误,因此该短语永远不会匹配任何内容:
inline99_*?\.jpg
^^^
根据您要匹配的示例数据,我认为您忘记了在星号前面的
\d
。您甚至没有要求它匹配,因为您在捕获的组后面放置了
*?
。因此,它什么都不匹配。这就是您得到的:什么都没有。除了:
($PATTERN)*?
只会捕获它匹配的最后一件事。那也可能不是您想要的。
例如:
$_ = 'one two three';
s/(\w+\s*)*/$1/;
print;
打印“三”。