2014-09-20 70 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