我有一个字符串,如
KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" this is the end of line.
我正在尝试匹配KEY1="VALUE1"
类型的字符串,并用更新的键值替换它们。
例如:整个模式 - > KEY1="VALUE1",
需要替换为NEW_STUFF
我正在使用的正则表达式如下:
's/"([,]?)$KEY=\".*\"," " "/"$NEW_STUFF"/g`
但这并没有结束。如果我的$KEY=KEY1
,
期望:NEW_STUFF KEY2="VALUE2",KEY3="VALUE3" this is the end of line.
实际结果:this is the end of line.
答案 0 :(得分:1)
我完全不确定你想要什么,因为你的Perl代码很奇怪,而且似乎并没有反映出你在问题中所说的内容。但是,处理该数据格式非常简单。
我建议您将字符串处理为一系列键/值对,您可以将它们存储在哈希中。然后,您可以简单地访问您想要的任何值。
喜欢这个
use strict;
use warnings;
use 5.010;
my $str = 'KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" etc.';
my %data = $str =~ / (\w+) = " ([^"]*) " /gx;
use Data::Dump;
dd \%data;
<强>输出强>
{ KEY1 => "VALUE1", KEY2 => "VALUE2", KEY3 => "VALUE3" }
答案 1 :(得分:1)
好吧我现在最好的猜测是,给定一个键,你想用另一个任意字符串替换该键及其值。如果是这样,那么这应该接近你需要的
use strict;
use warnings;
my $str = 'KEY1="VALUE1",KEY2="VALUE2",KEY3="VALUE3" etc.';
my $key = 'KEY2';
$str =~ s/ \b $key = " [^"]* " /NEWSTUFF/x;
print $str, "\n";
<强>输出强>
KEY1="VALUE1",NEWSTUFF,KEY3="VALUE3" etc.