以下正则表达式的作用是什么?
\d{1,3}.?\d{0,3}\s[0-9a-zA-Z. -]{4,40}
我知道 d 代表数字,但 1,3 有什么作用。
如果有人能进一步解释,我们将不胜感激
最佳答案
{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}
也许这个正则表达式也应该被锚定...但这只是一个猜测。
关于c# - 正则表达式 c# 涉及数字和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857840/