我真的很想使用\ w但它也会匹配下划线,所以我会选择[A-Za-z]感觉不必要的冗长和以美国为中心。有一个更好的方法吗?像[\ _ ^ ^]这样的东西(我怀疑我的语法是否正确)?
答案 0 :(得分:15)
也许你的意思是/[[:alpha:]]/
?有关POSIX字符类的讨论,请参阅perlre。
答案 1 :(得分:11)
只需使用\p{L}
表示“任何Unicode字母”,并在Perl(/\p{L}/
)中运行。您可能需要use utf8;
。
答案 2 :(得分:8)
您也可以使用/[a-z]/i
或/[[:alpha:]]/
。实际上,\w
包含数字,因此甚至无法使用。
答案 3 :(得分: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]/;
对我来说,结果是
matched :alpha:
如果删除use utf8
,则所有正则表达式都不匹配。
查看this very relevant question,看起来您可能希望use utf8
并查看Unicode::Semantics。
当然,如果您使用的是直接ASCII字符,那么上述任何正则表达式都可以使用。
答案 4 :(得分:6)
[^\W0-9_]
# or
[[:alpha:]]
请参阅perldoc perlre
答案 5 :(得分:4)
一些选择:
1. /[a-z]/i # case insensitive
2. /[A-Z]/i # case insensitive
3. /[A-z]/ # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/ # POSIX alpha character class
除非您考虑到某种语言偏好,否则我建议您使用不区分大小写或使用真正的/[a-zA-z]/
方式。
注意:
a-Z
。另外:此方法将失败无下划线标准,因为它包含 [\ _] ^ _` 。ʹʺʻˍˎˏːˑˬˮ̀́
(加上许多其他人)答案 6 :(得分:1)
您正在寻找正则表达式的国际化吗?然后你需要做这样的事情:JavaScript validation issue with international characters
明确匹配所有月亮语言字母:)