2013-01-11 85 views
1

我正在嘗試逐行讀取文檔,並且只對字母,而不是新行字符的某些字符感興趣。在Perl中使用正則表達式匹配字符

我有以下幾點:

@chars = split //; 

for $char (@chars) { 
    if ( ($pos % 16569 == 1719) 
     || ($pos % 16569 == 8251) 
     || ($pos % 16569 == 10238)) { 
    print FILE_OUT "$char\n"; 
    } 

    if ($char == m/[A-Z]/) { 
    $pos++; 
    } 

} 

正則表達式m/[A-Z]/無法匹配爲$pos永遠不會增加。甚至可以匹配Perl中的單個字符,或者這個操作只允許字符串?如果是這樣,有沒有辦法解決這個問題?

回答

5

您可能的意思是=~而不是====是相等的數字比較。 =~在操作符的左側調用常規模式匹配。

哦,你也應該總是use strictuse warnings,特別是在例子。

歡迎來到StackOverflow。

+0

是的。奇怪的語法,它類似於〜=這意味着!=在Matlab中。 –

3

可能有更好的做法,但遇到的問題是您使用了錯誤的操作符。 ==表示「數字,等於」;在這種情況下,你問$ char匹配$_匹配你的正則表達式(這不是你想要的!)

相反,你應該使用正則表達式匹配運算符:=~