只匹配正则表达式中的字母的最佳方法是什么?

Sap*_*Sun 13 regex perl letters

我真的想使用\ w但是它也匹配下划线,所以我会选择[A-Za-z]感觉不必要的冗长和以美国为中心.有一个更好的方法吗?像[\ _ ^ ^]这样的东西(我怀疑我的语法是否正确)?

zig*_*don 15

也许你的意思是/[[:alpha:]]/?有关POSIX字符类的讨论,请参阅perlre.


Tim*_*ker 11

只需使用\p{L}"任何Unicode字母",并在Perl(/\p{L}/)中工作.你可能需要use utf8;.


mkb*_*mkb 8

你也可以使用/[a-z]/i或者/[[:alpha:]]/也可以.实际上,\w包含数字甚至不起作用.


Can*_*ice 8

匹配国际(即非ASCII)字符有点困难,可能取决于很多东西.看看这个例子:

#!perl -w

use strict;
use utf8;

my $string = "ä";

print "matched :alpha:\n"  if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n"   if $string =~ /[a-z]/i;
print "matched [A-z]\n"    if $string =~ /[A-z]/;
Run Code Online (Sandbox Code Playgroud)

对我来说,这导致了

matched :alpha:
Run Code Online (Sandbox Code Playgroud)

如果删除use utf8则没有正则表达式匹配.

看看这个非常相关的问题,看起来你可能想要use utf8查看Unicode :: Semantics.

当然,如果您使用的是直接ASCII字符,那么上述任何正则表达式都可以使用.


run*_*rig 6

[^\W0-9_]

# or

[[:alpha:]]
Run Code Online (Sandbox Code Playgroud)

见perldoc perlre