我想搜索不区分大小写的字符串并用perl中的原始字符串替换

时间:2015-08-24 17:39:14

标签: string perl

我正在尝试在字符串中搜索子字符串并突出显示搜索文本。到目前为止我所拥有的是:

$text = 'Guitar';
$search = 'guit';

使用下面的代码我会返回字符串' guitar'与' guit'突出显示,但我想返回原来的' Guit'以首都G'突出显示。任何帮助将不胜感激。

my $replace = "<span style='color:white;background- color:red'>$search</span>";
$text =~ s/$search/$replace/gi;

3 个答案:

答案 0 :(得分:0)

使用$&, which will be set to the matched string

i

更新:这不会起作用,因为@ThisSuitIsBlackNot评论如下:当该字符串是变量时,my $text = "Albert Hammond's guitar from Gibraltar."; foreach my $text ('guitar', 'Gibraltar') { my $replace = "<span style='color:white;background-color:red'>" . $& . "</span>"; $text =~ s/$search/$replace/gi; } 将不会在替换字符串中被解释。 (我不知道这一点。)所以你必须摆脱变量:

$&

打印

my $text = "Albert Hammond's guitar from Gibraltar.";

foreach my $search ('guitar', 'Gibraltar') {
    my $replace = "";
    $text =~ s/$search/<span style='color:white;background-color:red>$&<\/span>/gi;
}

请注意,我还必须转义替换字符串中的Albert Hammond's <span style='color:white;background-color:red>guitar</span> from <span style='color:white;background-color:red>Gibraltar</span>. ,因为/也用于分隔/命令的参数。

这可能还不够好。

假设您s的值绝不会包含正则表达式特有的任何字符(例如$search.)。 如果可能,您可以使用qr来逃避它们。

它还假设这些值从不包含XML特有的任何字符(例如*<或我的示例中的>。)。如果可能,请使用XML::LibXML等XML操作库进行更改,或使用XSLT。

答案 1 :(得分:0)

这就是诀窍。

node.js

答案 2 :(得分:0)

通过要求将替换字符串保存在标量变量中,您已经使自己变得困难了。没有那个

$text =~ s{($search)}{<span style='color:white;background-color:red'>$1</span>}gi;

可以正常工作

因为你需要/ee eval表达式修饰符,就像这样

use strict;
use warnings;
use 5.010;

my $text   = 'Guitar';
my $search = 'guit';

my $replace = q{<span style='color:white;background-color:red'>$1</span>};

$text =~ s/($search)/ "qq{$replace}" /eegi;

say $text

输出

<span style='color:white;background-color:red'>Guit</span>ar