String 我想搜索不区分大小写的字符串,并替换为perl中的原始字符串
我试图在字符串中搜索子字符串并突出显示搜索文本。到目前为止,我得到的是:String 我想搜索不区分大小写的字符串,并替换为perl中的原始字符串,string,perl,String,Perl,我试图在字符串中搜索子字符串并突出显示搜索文本。到目前为止,我得到的是: $text = 'Guitar'; $search = 'guit'; 使用下面的代码,我返回突出显示了“guit”的字符串“guit”,但我想返回突出显示了大写字母“G”的原始“guit”。任何帮助都将不胜感激 my $replace = "<span style='color:white;background- color:red'>$search</span>"; $text =~ s/$s
$text = 'Guitar';
$search = 'guit';
使用下面的代码,我返回突出显示了“guit”的字符串“guit”,但我想返回突出显示了大写字母“G”的原始“guit”。任何帮助都将不胜感激
my $replace = "<span style='color:white;background- color:red'>$search</span>";
$text =~ s/$search/$replace/gi;
my$replace=“$search”;
$text=~s/$search/$replace/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
的值永远不会包含正则表达式专用的任何字符(例如
或*
)。
如果他们可能的话,你可以用它来逃避他们
它还假定这些值从不包含XML的任何特殊字符(例如
,或我的示例中的'
)。如果可能的话,可以使用XML操纵库(例如)进行更改,或者使用XSLT。这就成功了
my ($original) = $text =~ m/$search/gi;
my $replace = "<span style='color:white;background-color:red'>$original</span>";
$text =~ s/$search/$replace/gi;
my($original)=$text=~m/$search/gi;
my$replace=“$original”;
$text=~s/$search/$replace/gi;
您要求将替换字符串保存在标量变量中,这给您自己造成了困难。没有这个
$text =~ s{($search)}{<span style='color:white;background-color:red'>$1</span>}gi;
输出
吉他
为什么不使用$search='Guit'
?这样,不区分大小写的搜索将捕获它,替换仍将为您提供大写GYE,但我也希望能够在“guit”上搜索。如果您搜索不区分大小写-两者都将起作用,我的问题是替换突出显示的文本,因为原始字符串$&
仅在匹配后设置,因此不起作用(例如,您通常不应该在Perl上使用$&
,因为在连接它时$&
是undef
,所以$replace
设置为空span标记。您正在查找s/foo/bar$&baz/
或s/foo/“bar”。$&。“baz”/e
或s/foo/“qq{$replace}”/ee
。你完全正确-我从来不知道这一点。相应地更改了答案。
my ($original) = $text =~ m/$search/gi;
my $replace = "<span style='color:white;background-color:red'>$original</span>";
$text =~ s/$search/$replace/gi;
$text =~ s{($search)}{<span style='color:white;background-color:red'>$1</span>}gi;
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