我真的想使用\ w但它也匹配下划线,所以我要与[A-Za-z]一起感觉不必要的冗长和美国为中心。有一个更好的方法吗?像[\ w^_]之类的东西(我怀疑我的语法正确)?在正则表达式中只匹配字母的最佳方式是什么?
回答
你可以使用/[a-z]/i
或/[[:alpha:]]/
一样好。实际上,\w
包含数字,因此甚至不起作用。
我认为'i'使它不区分大小写? – keithjgrant 2010-09-20 18:26:45
这是正确的。 – mkb 2010-09-20 18:47:16
这只是不正确的答案。参见下文。 – 2016-04-26 04:10:52
[^\W0-9_]
# or
[[:alpha:]]
请参阅perldoc perlre
你正在寻找国际化在你的正则表达式?那么你需要做这样的事情的人做的事:JavaScript validation issue with international characters
明确匹配所有月球语言文字:)
有几个选项:
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',因为ASCII值的顺序先小写的 'Z';如果你做了相反的处理,它不起作用:
a-Z
。另外:此方法会失败无下划线标准,因为它包括[\]^_`。 - 4号将匹配这些额外的语言字符,但它也对比赛:
ʹʺʻˍˎˏːˑˬˮ̀́
(以及许多其他)
'[A-z]'范围包括一堆其他字符。 – NullUserException 2010-09-20 19:02:54
你是对的,有几个括号和额外的字符,这将打破没有下划线的标准。我修改了答案。 @flies,是的,但我错了。真的,前两个是相同的方法,只是表明你可以使用不同的输入。 – vol7ron 2010-09-20 23:22:02
匹配国际(即非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
和检查出。
当然,如果你使用的是直接的ASCII字符,比任何前述的正则表达式都可以工作。
你必须在Perl中注意\ w和\ W。最近有点动人的目标,所以我不会依赖它的定义。 – 2010-09-20 21:19:08
编辑器显示为'ä'的内容可能不是Perl中的字母。 'ä'=“\ xE4”未在ASCII字符集中定义,默认情况下,Perl将使用ASCII字符类作为未编码为UTF8的字符串。添加'use utf8;'会将你的源代码视为UTF8,并使“ä”成为一个Unicode字符串。在Unicode字符集中,'ä'是一个字母字符。比较'$ string =“ä”;'vs'$ string = decode(“iso-8859-1”,“ä”);'不使用utf8;'。在第一种情况下,Perl会看到二进制数据,第二种情况下二进制数据被解释为Latin-1并转换为UTF-8。 – 2010-09-21 20:29:44
只需使用\p{L}
这意味着“任何Unicode字母”,并在Perl(/\p{L}/
)中工作。您可能需要use utf8;
。
- 1. 在Hpricot中匹配id和正则表达式的最佳方式是什么?
- 2. Python中的正则表达式只匹配字母表是什么?
- 3. 正则表达式仅匹配字母
- 4. 正则表达式 - 匹配外来字符的正则表达式是什么?
- 5. 正则表达式匹配只是
- 6. 匹配字母字符正则表达式变量只
- 7. 正则表达式匹配的是数字,而不是字母
- 8. 匹配字母数字6字符串的正则表达式是什么?
- 9. 只匹配一个大写字母的正则表达式
- 10. 匹配什么是正则表达式beetwen支架(和只)
- 11. '\ $'正则表达式匹配什么?
- 12. 正则表达式:匹配只包含一个字母串
- 13. 正则表达式匹配包含字母串,只强调
- 14. 只在正则表达式匹配
- 15. 匹配方括号的正则表达式是什么?
- 16. 匹配方括号的正则表达式是什么? (Part II)
- 17. 什么是验证字段的最佳正则表达式?
- 18. 正则表达式是匹配和替换文本的最佳方式吗?
- 19. 为什么Python正则表达式通配符只匹配newLine
- 20. 正则表达式:匹配与数字字母或字母只有
- 21. 最佳匹配额定配对的最佳方式是什么?
- 22. 正则表达式匹配最短匹配而不是最长
- 23. 匹配最好的正则表达式
- 24. 正则表达式正则表达式匹配字符串
- 25. 正则表达式只匹配.gov tlds
- 26. 在Python中提取正则表达式匹配的正确方法是什么?
- 27. 正则表达式匹配大写字母不是短跑
- 28. 正则表达式匹配模式“\\ [。* \\]”是什么意思?
- 29. 正则表达式只返回字母
- 30. 正则表达式的Java非字母数字字符匹配
'[A-Za-z]'不是以美国为中心的,它是以ASCII为中心的。 – CanSpice 2010-09-20 19:09:55
@CanSpice,我会说它是以拉丁为中心的,因为ASCII只使用拉丁字母。 – Axeman 2010-09-20 19:53:55
@Axeman,来源? AFAIK许多拉丁派生语言强调元音和字母。 [A-Za-z]不会与西班牙语和法语不匹配。即使是纯粹的拉丁文也有不在ASCII内部的Æ字形。你在说什么拉丁语? – Kyordhel 2017-11-27 19:28:55