不匹配(在正则表达式中;用 < 标记 -- 当替换换成两半的单词时,HERE ()



这个文件包含一行文本:

<p>detached, (disconnected, unfastened</p>   

我需要用,分隔的三个单词包装在<a></a>标签中,如下所示:

<p><a href="entry://detached">detached</a>, <a href="entry://(disconnected">(disconnected</a>, <a href="entry://unfastened">unfastened</a></p>

当我跑步时

perl -pE'/<p>K.*?(?=</p>)/; @words=split(/, /, $&); $new_string=join ", ", map {qq|<a href="entry://$_">$_</a>|} @words; $_=~s/$&/$new_string/g;' a.txt

它给出以下错误:

无与伦比(在正则表达式中;用

不过,这个确实有效:

perl -pE's{<p>K.*?(?=</p>)}{join ", ", map {qq|<a href="entry://$_">$_</a>|} split(/, /, $&)}eg' a.txt

我不知道为什么,因为基本上在他们背后是同样的想法。第一个如何不能按预期工作?

如果这很重要,我使用的是带有Perl v5.28.1的macOS Catalina。

我同意 Håkon 的观点; 最后的替换是解释此输入流中的括号,而不是找到与之匹配的括号。你不能只打印/发出你的$new_string吗?

最新更新