正则表达的意图

我已经看到正则表达式@"^[AZ]+[a-zA-Z''-'\s]*$"用于检查字符串是否是人名,并且具有正则表达式格式中描述的相同问题[ RegularExpression(@“^ [AZ] + [a-zA-Z” – ‘\ s] * $”)] [重复] 。 也就是说, [''-']的意图是什么?

由于所有[''-'][']['-']匹配单撇号, [']应该足够, ['-']看起来多余。 但是,我在MSDN和书籍中的几篇文章中看到过这种表达方式,因此它似乎是一种常见的模式。 我认为应该有一个合理的理由包括['-'] 。 对上述问题的评论并未涉及到这一点。

添加

仅供参考,我在Microsoft中添加使用此表达式的文章。 ''在连字符之前是两个连续的单引号但不是双引号。

  • 添加validation
  • 为ASP.NET MVC应用程序创建更复杂的数据模型

正则表达式字符类中的连字符有两个含义:两个字符之间的范围 ,如经典[az]和简单的字面连字符。

对于你发布的特定正则表达式[''-']我认为你的意思是["-'] ,你可以在下面找到解释。然而,模式[''-']它是一个非常难看的正则表达式来定义文字字符串' (或者它只是一个错误的正则表达式)。

但是,通常人们使用最常见范围[AZ][az][0-9]连字符,但这背后有更深层次的行为。 使用ASCII表应用范围:

在此处输入图像描述


范围从“到”

所以,如果你的范围是["-']你会接受这些字符: "#$%&'

正则表达式演示

在此处输入图像描述


范围从’到’(文字’)

同样,如果你使用['-'] ,你使用的是''的范围,这与使用文字字符串'

正则表达式演示

在此处输入图像描述


连字符作为字符类中的字面值

另一方面,如果你将连字符放在字符类的末尾,它将不能作为一个范围使用,并将使用一个文字字符串(如果你用反斜杠\-逃避它:

正则表达式演示

在此处输入图像描述


单引号的冗余模式:[” – ‘]

作为您发布的特定模式的附加注释,您可以在屏幕截图中看到解释,简单地说它是一个冗余模式,用于简单匹配文字字符串'

正则表达式演示

在此处输入图像描述