如何使用正则表达式将文本附加和前置到匹配的子字符串

时间:2014-01-22 05:13:54

标签: html regex perl

我正在使用html标记在Perl中格式化字符串。 给定字符串S of pattern:

  • xyz卢比的净内部收益..............

如何预先添加<p class="Green">并附加</p>以将字符串S转换为:

<p class="Green">net insider gain of xyz</p> Rupees ...........

我试过了什么? 我尝试找到net的索引和of的索引,然后连接<p class="Green"></p>。但这种方法有点慢。

你能建议更好的方法吗?

4 个答案:

答案 0 :(得分:3)

使用正则表达式替换:

$S =~ s!\b(net insider\b.*?)( Rupees)!<p class="Green">$1</p>$2!;

给出:

<p class="Green">net insider gain of xyz</p> Rupees

答案 1 :(得分:1)

您可以使用以下内容:

(net)(.*)(Rupess)(.*)

并替换为:<p class="Green">\1\2</p>\3\4

<强> Demo

在perl中,您可以使用$1$2$3$4代替\1 \2 \3 {{ 1}}

答案 2 :(得分:1)

您可以尝试使用此正则表达式来获取您喜欢的字符串

my $ip="net insider gain of xyz Rupess ..............";
if($ip =~ /(.*) Rupess (.*)/)
{
    print "<p class=\"Green\">$1</p> Rupess $2";
}
else
{
    print "no match..."
}

答案 3 :(得分:1)

你的问题有许多可能的答案,ritesh,因为你没有在逻辑上指明这个算法应该如何运作。相反,我们必须继续进行的是一个字符串,并尽可能地猜测其他可能的输入值。我相信Radhuram可能是正确的 - “卢比”是划分字符串的最佳值。鉴于此,我建议:

my $S = 'net insider gain of xyz Rupees ..............';
$S =~ s{(.*)( Rupees)\b}{<p class="Green">$1</p>$2};

产生:

<p class="Green">net insider gain of xyz</p> Rupees ..............