26

我试图理解以下正则表达式,我理解最初的部分,但我无法弄清楚 {3,19} 在这里做什么:

/[A-Z][A-Za-z0-9\s]{3,19}$/
4

6 回答 6

35

这就是称为量词的自定义重复操作。

\d{3}将准确找到三位数字。

[a-c]{1,3}将发现 a、b 或 c 的任何出现至少一次,但最多 3 次。

\w{0,1}表示将可选地找到一个单词字符。这与放置问号相同,例如:\w?

(\d\w){1,}将找到至少一次,但最多无限次的数字后跟单词字符的任意组合。所以它会匹配1k1k2k4k1k5j2j9k4h1k5k 这与加号相同,例如:(\d\w)+

b{0,}\d可以选择查找b后跟数字的字母,但也可以匹配b后跟数字的无限字母。所以它将匹配5, b5,甚至bbbbbbb5。这与星号相同。例如:b*\d

量词

于 2013-06-10T21:19:23.700 回答
8

它们是“量词” ——这意味着“匹配先前的模式 3 到 19 次”

当您学习正则表达式时,在一个可以突出匹配项的交互式工具中使用它们真的很有用。我一直很喜欢一个叫做Regex Coach的工具,但它只适用于 Windows。虽然有很多在线工具——例如,在这里玩一下你的正则表达式。

于 2013-06-10T21:11:17.910 回答
6

{n,m}意思是“至少重复前一个元素,n最多重复m”,所以这个表达式的
[A-Za-z0-9\s]{3,19}意思是“匹配 3 到 19 个字母、数字或空格字符”。请注意,默认情况下重复是贪婪的,因此这将尝试匹配该范围内尽可能多的字符(这在这里不起作用,因为行尾锚使得它实际上只有一种可能性匹配)。

于 2013-06-10T21:13:40.477 回答
3

您在那里的正则表达式/[A-Z][A-Za-z0-9\s]{3,19}$/ 分解为:

[A-Z]我们正在寻找一个大写字母

其次是

[A-Za-z0-9\s]{3,19}一系列介于 3 到 19 个字符之间的字母、数字或空格

$然后是行尾。

于 2013-06-10T21:13:04.253 回答
1

它必须匹配 [A-Za-z0-9\s] 3 到 19 次。

这是一个很好的正则表达式参考指南:

http://www.regular-expressions.info/reference.html

于 2013-06-10T21:13:15.180 回答
0

正则表达式末尾大括号中的逗号分隔数字是什么意思

它表示具有大括号中指定范围的量词。

花括号类似物与参数一起起作用。我们可以指定单个整数或两个整数作为两个数字之间的范围。

/[A-Z][A-Za-z0-9\s]{3,19}$/

使用在线正则表达式网站,我们可以理解如下:

https://regex101.com/

https://regex101.com/

于 2016-01-15T07:21:21.867 回答