该文件包含一行文本:
<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。
答案 0 :(得分:1)
我同意哈科恩;最后的替换是解释此输入流中的括号,而不是找到与其匹配的项。您不仅可以打印/发送$ new_string吗?