我需要找到双引号的每个单词并将qoutes替换为括号,因为perl在sybase iq中执行字符串时会发现语法错误,如果代码中有双qoutes。例如:
"test", "default", "left","right"
我想替换看起来像这样
[test], [default], [left],[right]
这是我走了多远:
$arr_tab[$i] =~ s/"\w+"/[$0]/g;
\w+
找到字符串中的所有“字词”并将其替换为[test]
,我不知道如何将搜索结果写入$0
并通过它进行删除以使其成为适当替换每个发现。
答案 0 :(得分:2)
这看起来像一个适合Text::ParseWords
的工作,这是Perl 5中的核心模块。
use strict;
use warnings;
use Text::ParseWords;
while (<DATA>) {
chomp;
print join ", ", map "[$_]", quotewords('\s*,\s*',0,$_);
}
__DATA__
"test", "default", "left","right"
输出是:
[test], [default], [left], [right]
说明:
quotewords
子例程解析字符串,并在逗号上将其与可选的周围空格分开。它还会删除引号,因为我将“keep”选项设置为零0
。然后,我们可以使用map
语句将括号应用于生成的单词列表。最后,我们将它与逗号和打印一起加入。
答案 1 :(得分:0)
你可以简单地使用捕获组并使用[^"]
来匹配"
之外的任何角色,如果你使用\w
,它只会匹配单词字符并赢得&# 39;如果双引号内存在非单词字符,则无效。
s/"([^"]*)"/[$1]/g;
示例:
use strict;
use warnings;
my $string = '"test", "default", "left","right"';
$string =~ s/"([^"]*)"/[$1]/g;
print "$string\n";
输出:
[test], [default], [left],[right]