以下正则表达式做了什么?
\d{1,3}.?\d{0,3}\s[0-9a-zA-Z. -]{4,40}
我理解d代表数字,但1,3代表什么。
如果有人可以进一步解释,那将是值得赞赏的
答案 0 :(得分:2)
{n,m}
是一个量词,意思是“至少n次,最多m次”。像所有量词一样,它默认是贪婪的,对于支持它们的正则表达式,它也有懒惰和占有的版本(分别为{n,m}?
和{n,m}+
- .NET支持前者但不支持后者,不幸的是)。
如果未指定n
,则为0;如果未指定m
,则为无穷大。
这意味着您可以使用此量词“重写”经典*
,+
和?
:
*
是{0,}
; +
是{1,}
; ?
是{0,1}
。(注意:我认为.
中的.?
意味着是一个字面点,这意味着它应该被转义,即\.?
;正则表达式中的点意味着“任何字符“,除了字符类。”
关于正则表达式本身:
\d{1,3} # match a digit, one to three times, followed by
.? # any character, 0 or one time (see my remark), followed by
\d{0,3} # a digit, zero to three times, followed by
\s # a space character, followed by
[0-9a-zA-Z. -] # a digit, or any letter, or a dot, or a space, or a hyphen,
{4,40} # 4 to 40 times
最后,应该注意.NET语言中的\d
不会将自身限制为0-9,它可以匹配其他Unicode数字。
编辑:正确的,正确的,考虑到@AlanMoore的评论,将是:
\d{1,3}(\.\d{1,3})?\s[0-9a-zA-Z. -]{4,40}
也许这个正则表达式也应该被锚定......但这只是猜测。