2014-09-20 69 views
0

我使用Perl,我需要識別具有變音符號等重音字符的字符串。我嘗試使用正則表達式[A-z],但這不起作用。我用Perl代碼片段是:在Perl中識別重音字符

if ($s =~ /^[A-za-z0-9_]+$/) { 
    # No accented chars, do something 
} else { 
    accented chars, do something else 
} 
+0

可能想檢查[this](http://perldoc.perl.org/perlre.html#Regular-Expressions)out 。希望能幫助到你! – Cullub 2014-09-20 22:29:12

+0

我認爲這取決於語言環境,但如果您在擴展範圍內的所有內容都是重音字符,則可以使用'[\ x80- \ FF] +'。 – sln 2014-09-20 23:12:11

回答

2

你可以嘗試這樣的事情:

if ($s =~ /[^\P{Latin}A-Za-z]/) { 
    # accented chars, do something 
} else { 
    # No accented chars, do something else 
} 

\p{Latin}包含拉丁字母(包括重音字母和喜歡ç œ æ...字符)。你可以否定這個類有一個大寫的Y:\P{Latin}(即包含了除拉丁字母的所有字符。)

如果你把它放進一個否定的字符類:[^....]你獲得兩個否定。所以[^\P{Latin}]\p{Latin}相同。但是因爲你有一個否定字符類,你可以很容易地排除你不想要的字符:[^\P{Latin}A-Za-z]

+0

謝謝卡西米爾,這工作得很好! – RVS 2014-09-20 23:32:16

+0

其他後續問題:如何識別非英文字符,無論它們是重音符號還是使用印地語? – RVS 2014-09-21 01:00:46

+1

@RVS作爲後續步驟,您應該閱讀[perluniprops](http://perldoc.perl.org/perluniprops.html)以瞭解您可以在perl中匹配的代碼點中的unicode屬性。 – cajwine 2014-09-21 07:41:41