正则表达的意图['' - ']

时间:2015-10-16 14:43:25

标签: c# regex

我看过一个正则表达式@"^[A-Z]+[a-zA-Z''-'\s]*$",用于检查字符串是否为人名,并且具有Regular Expression format meaning of [RegularExpression(@“^[A-Z]+[a-zA-Z''-'\s]*$”)] [duplicate]中描述的相同问题。即,[''-']的意图是什么?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

enter image description here

范围来自"到'

因此,如果您的某个范围为["-'],您将接受这些字符:"#$%&'

<强> Regex demo

enter image description here

范围来自&#39;到&#39; (字面意思&#39;)

同样,如果您使用['-'],则使用''的范围,这与使用文字字符串'相同:

<强> Regex demo

enter image description here

连字符在字符类

中为字面值

另一方面,如果你将连字符放在字符类的末尾,它就不会作为一个范围工作,并且将使用一个文字字符串(如果你用反斜杠\-转义它就一样:

<强> Regex demo

enter image description here

单引号的冗余模式:[&#39;&#39; - &#39;]

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

<强> Regex demo

enter image description here