正则表达式末尾用花括号包含逗号分隔的数字是什么意思?

32

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

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

5
长度介于3到19之间。 - David Starkey
1
如果您想了解更多,请点击 [tag:regex] 标签并点击“了解更多”。 - Shiplu Mokaddim
http://www.regular-expressions.info/repeat.html - Felix Kling
相关内容: http://stackoverflow.com/q/6939517/218196 - Felix Kling
请注意,A-Za-z0-9\w 相同,只是 \w 还包括下划线,人们通常也希望允许下划线,或者不介意包含下划线,因为这样更容易阅读。所以,作为注释,这个更好:/[A-Z][\w\s]{3,19}$/。这是一个以大写字母开头的单词或句子(包括数字),后面必须跟随三到十九个字符,可以是任何组合的单词字符或空格。 - Suamere
6个回答

44

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

\d{3} 将精确匹配三个数字。

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

\w{0,1} 表示可选择性地匹配单词字符。这与放置问号相同,例如:\w?

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

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

量词


谢谢@Sunamere,这是一个很好的解释。现在我明白了。 - sagar

8

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

当你学习正则表达式时,在一个可以突出显示匹配项的交互式工具中玩耍非常有用。我一直喜欢一个叫做Regex Coach的工具,但它只适用于Windows。不过有很多在线工具 - 例如在这里玩耍你的正则表达式here


这是否意味着例如在长字符串“abcefghABCdsadgdgsdfsaa”中,它将尝试从索引3开始匹配模式,直到索引19? - sagar
不会 - 模式将从第一个大写字母开始匹配,然后将匹配3到19个字母数字或空格 - 由于它是贪婪的,它将尽可能地匹配多个,但必须至少匹配3个。 - Paul Dixon
@sagar:{n,m}类似于?*+(它是一个量词符号),但不同的是,它匹配的次数至少为n次,最多为m次。请查看Paul提供的文档。同时也可以参考http://www.regular-expressions.info/repeat.html。 - Felix Kling

6

{n,m} 表示“重复前面的元素至少 n 次,最多 m 次”,因此表达式
[A-Za-z0-9\s]{3,19} 表示“匹配 3 到 19 个字符,这些字符是字母、数字或空格”。请注意,默认情况下重复是贪婪的,因此它将尝试在该范围内尽可能匹配多的字符(由于行尾锚点使得每次匹配只有一个可能性,所以这里不会影响结果)。


此答案已被添加到 Stack Overflow 正则表达式 FAQ 中的“量词”部分。 - aliteralmind
1
太棒了!看起来是一个绝佳的资源,很自豪能成为其中的一部分 :) - Andrew Clark

3
你所提供的正则表达式/[A-Z][A-Za-z0-9\s]{3,19}$/的意思如下: [A-Z]:我们正在寻找一个大写字母
接着是 [A-Za-z0-9\s]{3,19}:一系列长度在3到19个字符之间的字母、数字或空格
最后是 $:行尾

1

0
逗号分隔的数字在正则表达式末尾的花括号中表示量词,其范围由花括号内指定。
花括号类似于带有参数的函数。我们可以指定单个整数或两个整数,它们构成了两个数字之间的范围。
/[A-Z][A-Za-z0-9\s]{3,19}$/

通过在线正则表达式网站,我们可以了解如下:

https://regex101.com/

https://regex101.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接