我真的很想使用 \w 但它也匹配下划线,所以我将使用 [A-Za-z] ,它感觉不必要的冗长和以美国为中心。有一个更好的方法吗?[\w^_] 之类的东西(我怀疑我的语法是否正确)?
问问题
33839 次
7 回答
16
也许你的意思是/[[:alpha:]]/
?有关 POSIX 字符类的讨论,请参见perlre。
于 2010-09-20T18:03:27.753 回答
13
只需使用\p{L}
这意味着“任何 Unicode 字母”并在 Perl ( /\p{L}/
) 中工作。你可能需要use utf8;
.
于 2010-09-20T19:07:21.503 回答
8
您可以使用/[a-z]/i
或/[[:alpha:]]/
也可以。事实上,\w
包括数字,这样甚至都行不通。
于 2010-09-20T18:04:24.303 回答
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
则没有任何正则表达式匹配。
查看这个非常相关的问题,您可能想要use utf8
查看Unicode::Semantics。
当然,如果您使用直接的 ASCII 字符,则上述任何正则表达式都可以使用。
于 2010-09-20T18:50:03.010 回答
6
[^\W0-9_]
# or
[[:alpha:]]
见 perldoc perlre
于 2010-09-20T18:04:05.680 回答
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
我建议使用不区分大小写或 true way /[a-zA-z]/
,除非您有某种语言偏好。
笔记:
- 由于 ASCII 值的顺序,数字 3 首先需要大写“A”,然后是小写“z”;如果你做相反的事情,它就不起作用:
a-Z
. 另外:此方法将不符合无下划线标准,因为它包含 [ \ ] ^ _ ` 。 - 数字 4 将匹配那些额外的语言字符,但它也匹配:(
ʹʺʻˍˎˏːˑˬˮ̀́
以及许多其他字符)
于 2010-09-20T18:23:03.717 回答
0
你在你的正则表达式中寻找国际化?那么你需要像这个人那样做:JavaScript validation issue with international characters
明确匹配所有月球语言字母:)
于 2010-09-20T18:06:56.297 回答