题
我真的很想使用 w,但它也与下划线相匹配,所以我与[A-ZA-Z]一起去,这感觉不必要地冗长,以美国为中心。有一个更好的方法吗?类似[ w^_]的东西(我怀疑我的语法正确)吗?
解决方案
您可以使用 /[a-z]/i
或者 /[[:alpha:]]/
也是。实际上, \w
包括数字,甚至不起作用。
其他提示
也许你的意思是 /[[:alpha:]]/
?看 Perlre 为了讨论POSIX字符类。
只是使用 \p{L}
这意味着“任何Unicode字母”并在Perl中起作用(/\p{L}/
)。您可能需要 use utf8;
.
匹配国际(即非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
然后,没有任何正则表达式匹配。
看着 这个非常相关的问题, ,看来您可能想 use utf8
并结帐 Unicode ::语义.
当然,如果您使用的是直接的ASCII字符,那么上述任何一个正则表达式将起作用。
[^\W0-9_]
# or
[[:alpha:]]
请参阅Perldoc Perlre
一些选项:
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]/
, ,除非您有一定的语言偏好。
笔记:
- 数字3要求首先“ a”,然后是小写“ z”,因为ASCII值的顺序;如果您进行相反的情况,它不起作用:
a-Z
. 。还: 此方法将使无通用标准失败,因为它包括 [ \ ] ^ _ ` . - 数字4将与这些其他语言字符匹配,但也可以匹配:
ʹʺʻˍˎˏːˑˬˮ̀́
(加上许多其他)
您正在寻找以下方面的国际化吗?然后,您需要像这个家伙那样做: 国际角色的JavaScript验证问题
明确匹配所有月亮语言字母:)
不隶属于 StackOverflow