我从文本文件中获取行,然后需要将它们分成单词。因此,应忽略单引号或双引号中的内容。 例如:使用线; “$ var”,打印'评论':“获取'评论%2'” 应该插入数组中 use,line,print 。所有其他人都被忽略了 另外,我需要检查%是否位于单引号或双引号内(如上例所示)
my @array = $file_line =~ /[\$A-z_]{2,}/g;
给出所有单词(以及包含$的任何内容),但我不能忽略引号中的字符
有什么想法吗?
由于
答案 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;
您可能需要稍微更改一下,具体取决于您希望如何处理嵌套引号,未闭合的引号等。