2014-03-13 58 views
0

我从文本文件中获取行,然后需要将它们分成单词。因此,单引号或双引号的内容应该被忽略。 例如:使用行; “$ var”,print'comment':“get'comment%two'” 应该插入数组中作为使用,行,打印。所有其他只是被忽略。 此外,我需要检查是否%单或双引号坐在里面(就像上面的例子)如何分割字符串不显示任何双引号或单引号?

my @array = $file_line =~ /[\$A-z_]{2,}/g;给所有的字(加上任何包含$),但我不能没有忽略引号字符

有没有想法?

感谢

+0

可能重复(HTTP ://stackoverflow.com/questions/366202/regex-for-splitting-a-string-using-space-when-not-surrounded-by-single-or-double) –

回答

0

你可以先使用删除所有引用的话,例如:

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

您可能希望它取决于你想要如何处理嵌套的报价,未关闭的报价等稍微改变

1

我同意了答案,你可以先删除引用的话 使用

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

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

[\$A-z_] 

拾起 'A' 和 'Z' 之间的所有ASCII字符,尤其 以下标点字符:

[ \ ]^_ ` 

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

[\$A-Za-z_] 

或者你应该添加不区分大小写标志的“i”到你的替代 ,只需使用一个情况下,在正则表达式:

$file_line =~ /[\$A-Z_]{2,}/gi; 
的[正则表达式时,不通过单次或双引号分割使用空字符串]
相关问题