Regex 正则表达式仅匹配字母字符

Regex 正则表达式仅匹配字母字符,regex,Regex,我想知道我是否可以得到一个正则表达式,它将匹配一个只有字母字符的字符串,并且仅此而已。这将匹配一个或多个字母字符: /^[a-z]+$/ 您可以使用以下方法使其不区分大小写: /^[a-z]+$/i 或: 您可以使用以下两种变体中的任何一种: /^[A-Z]+$/i /^[A-Za-z]+$/ 匹配ASCII字母的输入字符串 [A-Za-z]将匹配所有字母表(小写和大写) ^和$将确保除了这些字母表之外,其他字母都不会匹配 代码: preg_match('/^[A-Z]+$/i', "

我想知道我是否可以得到一个正则表达式,它将匹配一个只有字母字符的字符串,并且仅此而已。

这将匹配一个或多个字母字符:

/^[a-z]+$/
您可以使用以下方法使其不区分大小写:

/^[a-z]+$/i
或:


您可以使用以下两种变体中的任何一种:

/^[A-Z]+$/i
/^[A-Za-z]+$/
匹配ASCII字母的输入字符串

  • [A-Za-z]
    将匹配所有字母表(小写和大写)
  • ^
    $
    将确保除了这些字母表之外,其他字母都不会匹配
代码:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);
array(0) {
}
输出:

preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m);
var_dump($m);
array(0) {
}
测试用例用于OP的注释,仅当输入中存在一个或多个字母时,OP才希望匹配。正如您在测试用例中看到的,匹配失败,因为输入字符串
abcAbc^Xyz
中存在
^

注意:请注意,上述答案仅与ASCII字母匹配,与Unicode字符不匹配。如果要匹配Unicode字母,请使用:

/^\p{L}+$/u

在这里,
\p{L}
匹配任何语言的任何类型的字母

[a-zA-Z]
应该可以做到这一点


如果需要包含非ASCII字母字符,并且如果您的正则表达式支持Unicode,则可以引用。

\A\pL+\z
将是正确的正则表达式

某些正则表达式引擎不支持此Unicode语法,但允许字母数字速记也匹配非ASCII字符。在这种情况下,您可以通过从
\w
中减去数字和下划线获得所有字母,如下所示:

\A[^\W\d_]+\z

\A
在字符串的开头匹配,
\z
在字符串的结尾匹配(
^
$
在某些语言(如Ruby)中也在行的开头/结尾匹配,或者如果设置了某些正则表达式选项)。

在Ruby和其他支持括号表达式中的POSIX字符类的语言中,您可以简单地执行以下操作:

/\A[[:alpha:]]+\z/i
这将匹配所有Unicode字母表语言中的alpha字符。简单的豌豆

更多信息:

类似于/^[a-zA-Z]+$/的东西应该可以工作。
a
根据您的定义是字母字符吗?你用的是什么语言?空字符串应该匹配吗?不,空字符串不应该匹配一个重要的注意:你没有引用一种语言或工具,在那里你想使用你要的正则表达式。尽管正则表达式的原理普遍相同,但并非所有地方的语法都相同。你应该在你想使用它的地方引用它。是的,但是如果我的字符串包含一个非单词字符,它仍然会匹配+1,因为它不认为英语字母表是唯一的字母表+1,如上所述。英语并不是唯一的字母表,许多人用非ascii字符来正确地表达自己的名字。除了那些字符(没有文档记录)之外,要得到所有的东西,请使用
[^[:alpha]]
。这将只匹配拉丁字符。而不是使用
[A-Za-z]
使用
[A-z]
[A-z]
是错误的,因为它与许多其他字符匹配,而不仅仅是
[A-Za-z]
嗯,有趣的是,我不知道这一点。那是其他语言吗?谢谢:)如果你查一个ASCII表格,你会看到Z和aI之间的字符知道
\p{L}
,但直到我找到这个答案,我才知道。谢谢分享这些知识。