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

时间:2019-07-18 15:07:38

标签: regex perl

该文件包含一行文本:

<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

它出现以下错误:

  

不匹配(在正则表达式中;用<-HERE…

标记

这确实可以工作:

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

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

  

如果这很重要,我正在使用Perl v5.28.1的macOS Catalina。

1 个答案:

答案 0 :(得分:1)

我同意哈科恩;最后的替换是解释此输入流中的括号,而不是找到与其匹配的项。您不仅可以打印/发送$ new_string吗?