如何在Regex中表示以下模式?

时间:2014-09-12 22:51:51

标签: regex bash perl shell

我有一个字符串,如

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.

2 个答案:

答案 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.