如何拆分字符串不显示双引号或单引号?

时间:2014-03-13 02:29:46

标签: regex perl-data-structures

我从文本文件中获取行,然后需要将它们分成单词。因此,应忽略单引号或双引号中的内容。 例如:使用线; “$ var”,打印'评论':“获取'评论%2'” 应该插入数组中 use,line,print 。所有其他人都被忽略了 另外,我需要检查%是否位于单引号或双引号内(如上例所示)

my @array = $file_line =~ /[\$A-z_]{2,}/g;给出所有单词(以及包含$的任何内容),但我不能忽略引号中的字符

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

我同意您可以先删除引用的字词的答案 使用

$line =~ s/ ( ["'] ) .*? \1 //xg;

但是,你应该知道你的正则表达式

[\$A-z_]

获取'A'和'z'之间的所有ASCII字符,特别是 以下标点字符:

[ \ ] ^ _ `

所以你应该在正则表达式中更明确

[\$A-Za-z_]

或者您应该在替换中添加不区分大小写的标记“i” 并在正则表达式中使用一个案例:

$file_line =~ /[\$A-Z_]{2,}/gi;

答案 1 :(得分:0)

您可以先删除所有引用的字词,例如使用:

$line =~ s/ ( ["'] ) .*? \1 //xg;

您可能需要稍微更改一下,具体取决于您希望如何处理嵌套引号,未闭合的引号等。