2012-01-13 89 views

回答

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 

最后,应该指出的是,在\d .NET语言本身并不限于0-9,它可以匹配其他Unicode的数字。

编辑:正则表达式,固定,考虑到@阿兰·摩尔的评论,应该是:

\d{1,3}(\.\d{1,3})?\s[0-9a-zA-Z. -]{4,40} 

也许这正则表达式应该被固定,太......不过,这只是一个猜测。

+1

我认为你说得对点。事实上,我认为它和数字的第二组意味着是一实数的任选小数部分,所以除非是点(并且反之亦然)的数字应该不存在:'\ d {1,3} ' – 2012-01-13 22:36:23

+0

@AlanMoore好点...我怀疑它,但缺乏上下文中猜测游戏(\ \ d {1,3});?)我想你是对的,但。 – fge 2012-01-13 22:39:47

相关问题