Regex 如何用括号替换双通道?

Regex 如何用括号替换双通道?,regex,perl,Regex,Perl,我需要找到每一个双引号的单词,并将qoutes替换到括号中,因为如果代码中有双qoutes,perl会通过在sybase iq中执行字符串来发现语法错误。例如: "test", "default", "left","right" 我想换成这个样子 [test], [default], [left],[right] 这就是我取得的成就: $arr_tab[$i] =~ s/"\w+"/[$0]/g; \w+查找字符串中的所有“单词”,并将其替换为[test],我不知道如何将查找结果写入$0

我需要找到每一个双引号的单词,并将qoutes替换到括号中,因为如果代码中有双qoutes,perl会通过在sybase iq中执行字符串来发现语法错误。例如:

"test", "default", "left","right"
我想换成这个样子

[test], [default], [left],[right]
这就是我取得的成就:

 $arr_tab[$i] =~ s/"\w+"/[$0]/g;

\w+
查找字符串中的所有“单词”,并将其替换为
[test]
,我不知道如何将查找结果写入
$0
,并通过它进行排序,以便对每个查找进行适当替换。

您可以简单地使用捕获组,也可以使用
[^”
匹配任何字符,但不匹配
,如果您使用
\w
,它将只匹配单词字符,如果双引号中存在非单词字符,它将不起作用

s/"([^"]*)"/[$1]/g;
例如:

use strict;
use warnings;
my $string = '"test", "default", "left","right"';
$string =~ s/"([^"]*)"/[$1]/g;
print "$string\n";
输出:

[test], [default], [left],[right]

这看起来很适合Perl5中的核心模块

use strict;
use warnings;
use Text::ParseWords;

while (<DATA>) {
    chomp;
    print join ", ", map "[$_]", quotewords('\s*,\s*',0,$_);
}

__DATA__
"test", "default", "left","right"
说明:

quotewords
子例程解析字符串,并用逗号和可选的空格分隔字符串。它还删除引号,因为我将“keep”选项设置为零
0
。然后,我们可以使用
map
语句将括号应用于生成的单词列表。最后我们用逗号和print将其连接起来

[test], [default], [left], [right]