正则表达的意图
我已经看到正则表达式@"^[AZ]+[a-zA-Z''-'\s]*$"
用于检查字符串是否是人名,并且具有正则表达式格式中描述的相同问题[ RegularExpression(@“^ [AZ] + [a-zA-Z” – ‘\ s] * $”)] [重复] 。 也就是说, [''-']
的意图是什么?
由于所有[''-']
, [']
和['-']
匹配单撇号, [']
应该足够, ['-']
看起来多余。 但是,我在MSDN和书籍中的几篇文章中看到过这种表达方式,因此它似乎是一种常见的模式。 我认为应该有一个合理的理由包括['-']
。 对上述问题的评论并未涉及到这一点。
添加
仅供参考,我在Microsoft中添加使用此表达式的文章。 ''
在连字符之前是两个连续的单引号但不是双引号。
- 添加validation
- 为ASP.NET MVC应用程序创建更复杂的数据模型
正则表达式字符类中的连字符有两个含义:两个字符之间的范围 ,如经典[az]
和简单的字面连字符。
对于你发布的特定正则表达式[''-']
我认为你的意思是["-']
,你可以在下面找到解释。然而,模式[''-']
它是一个非常难看的正则表达式来定义文字字符串'
(或者它只是一个错误的正则表达式)。
但是,通常人们使用最常见范围[AZ]
, [az]
或[0-9]
连字符,但这背后有更深层次的行为。 使用ASCII表应用范围:
范围从“到”
所以,如果你的范围是["-']
你会接受这些字符: "#$%&'
正则表达式演示
范围从’到’(文字’)
同样,如果你使用['-']
,你使用的是'
到'
的范围,这与使用文字字符串'
:
正则表达式演示
连字符作为字符类中的字面值
另一方面,如果你将连字符放在字符类的末尾,它将不能作为一个范围使用,并将使用一个文字字符串(如果你用反斜杠\-
逃避它:
正则表达式演示
单引号的冗余模式:[” – ‘]
作为您发布的特定模式的附加注释,您可以在屏幕截图中看到解释,简单地说它是一个冗余模式,用于简单匹配文字字符串'
。
正则表达式演示