Regex 如何用括号替换双通道?
我需要找到每一个双引号的单词,并将qoutes替换到括号中,因为如果代码中有双qoutes,perl会通过在sybase iq中执行字符串来发现语法错误。例如: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
"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]