我试图将括号内的内容放入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;

打印“三”。

07-24 09:47
查看更多