2014-03-13 61 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; 
的[正則表達式時,不通過單次或雙引號分割使用空字符串]
相關問題