我看过一个正则表达式@"^[A-Z]+[a-zA-Z''-'\s]*$"
,用于检查字符串是否为人名,并且具有Regular Expression format meaning of [RegularExpression(@“^[A-Z]+[a-zA-Z''-'\s]*$”)] [duplicate]中描述的相同问题。即,[''-']
的意图是什么?
由于所有[''-']
,[']
和['-']
都匹配单个撇号,[']
应该足够,['-']
看起来多余。但是,我在MSDN和书籍中的几篇文章中看到过这种表达方式,因此它似乎是一种常见的模式。我认为应该有合理的理由来包含['-']
。对上述问题的评论并未涉及到这一点。
加
仅供参考,我在Microsoft中添加使用此表达式的文章。连字符前的''
是两个连续的单引号,但不是双引号。
答案 0 :(得分:1)
正则表达式字符类中的连字符有两个含义:两个字符之间的范围,如经典[a-z]
和简单的连字符。
对于您发布的[''-']
特定正则表达式,我认为您的意思是["-']
,您可以在下面找到解释。但是,模式[''-']
只是定义文字字符串'
(或者它只是一个错误的正则表达式),这是一个非常难看的正则表达式。
但是,通常人们使用最常见范围[A-Z]
或[a-z]
或[0-9]
的连字符,但这背后有更深层次的行为。使用ASCII表应用范围:
因此,如果您的某个范围为["-']
,您将接受这些字符:"#$%&'
<强> Regex demo 强>
同样,如果您使用['-']
,则使用'
到'
的范围,这与使用文字字符串'
相同:
<强> Regex demo 强>
另一方面,如果你将连字符放在字符类的末尾,它就不会作为一个范围工作,并且将使用一个文字字符串(如果你用反斜杠\-
转义它就一样:
<强> Regex demo 强>
作为您发布的特定模式的附加注释,您可以在屏幕截图中看到解释,简单地说它是一个冗余模式,用于简单匹配文字字符串'
。
<强> Regex demo 强>