Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 我想搜索不区分大小写的字符串,并替换为perl中的原始字符串_String_Perl - Fatal编程技术网

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