2014-11-21 62 views
1

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

"test", "default", "left","right" 

我想更换看起来像这样

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

这是我走了多远:

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

\w+查找字符串中的所有“字”和用[test]代替它,我不知道如何将结果写入$0并通过它查找,因此它可以正确替换每个查找。

回答

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] 
+0

伟大的工作@Avinash拉杰,这确实如此,谢谢。 – theweeknd 2014-11-21 11:48:29

+0

不客气:-) – 2014-11-21 11:48:49

+0

你可以发表downvote的原因吗? – 2014-11-21 16:38:50

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子程序解析字符串,并具有可选的围绕白空格逗号分割它。它还删除引号,因为我将“保持”选项设置为零0。然后,我们可以使用map语句将括号应用于结果列表中的单词。最后,我们将其与逗号和印刷品一起加入。