我正在尝试替换与以下模式匹配的字符串:
my $string ="+++details of candidate
++name of candidate
+age of candidate
+++idiot
+idi";
该字符串应替换为:
my $string ="hii
how
fine
hii
fine";
我该如何做到这一点?
答案 0 :(得分:2)
也许:
$string =~ s/(\++)([^\+\n]*)/(qw(fine how hii))[length($1)-1]/ge;
答案 1 :(得分:-2)
使用
$string =~ s/([^+]*)[+]+((\w+).*)([^ \r\n]*|$)/$1<div class="$3">$2<\/div>/g;
$string =~ s/ class="details"//g;
<强>解释强>
+
... +
... +
序列后附加内容,将其包含在div
标记中,其中class
属性包含所述内容的第一个单词... ...有效地为每一行重复这种替换,并对结果进行汇总;
在第二次替换中,删除不需要的类属性(在这种情况下,&#39;详细信息&#39;)。
备注强>
+
个字符。<强>买者强>
考虑解决方案,因为它是概念证明:
正则表达式中替换的上下文的规范关键取决于将应用正则表达式的上下文,即。反对它的潜在字符串集必须匹配。
您提供的模式是一小组样本。从字面上看,模式恰好是您提供的字符串集。当然,正则表达式所表达的概括是我自己对模式的实际性质的假设。
<强>更新强>
OP更新了他的问题,并要求另外一个替代:
$string =~ s/[+]{3}((\w+).*)([^ \r\n]*|$)/hii/g;
$string =~ s/[+]{2}((\w+).*)([^ \r\n]*|$)/how/g;
$string =~ s/[+]{1}((\w+).*)([^ \r\n]*|$)/fine/g;
通过减少模式中+
序列长度的顺序非常重要。