我正在尝试创建一个正则表达式来验证给定字符串只有a-z或A-Z的字母字符。可以使用所谓的"字符类"轻松完成这个任务。基本上,它们允许我们指定一个值范围进行匹配:
(注意:为了简化,我假设隐含的^和$锚点,这些锚点在本帖子后面会解释)
[a-z] 匹配任何单个小写字母。
例如:a匹配,8不匹配。
[A-Z] 匹配任何单个大写字母。
例如:A匹配,a不匹配。
[0-9] 匹配任何单个数字零到九
例如:8匹配,a不匹配。
[aeiou] 仅匹配a、e、i、o或u。
例如:o匹配,z不匹配。
[a-zA-Z] 匹配任何单个小写字母或大写字母。
例如:A匹配,a匹配,3不匹配。
这些当然也可以被否定:
[^a-z] 匹配任何不是小写字母的内容
例如:5匹配,A匹配,a不匹配。
[^A-Z] 匹配任何不是大写字母的内容
例如:5匹配,A不匹配,a匹配。
[^0-9] 匹配任何不是数字的内容
例如:5不匹配,A匹配,a匹配。
[^Aa69] 匹配除 A、a、6 和 9 以外的任何内容。
例如:5 匹配,A 不匹配,a 不匹配,3 匹配
要查看一些常见的字符类,请转到:
http://www.regular-expressions.info/reference.html
该字符串可以长达 25 个字母。
(我不确定正则表达式是否可以检查字符串的长度。)
您绝对可以检查“长度”,但不是您想象中的方式。我们使用 {} 来测量重复次数,而不是严格意义上的长度:
a{2} 匹配两个 a。
例如:a 不匹配,aa 匹配,aca 不匹配
4{3} 匹配三个 4。
例如:4 不匹配,44 不匹配,444 匹配,4434 不匹配
重复具有我们可以设置的值,以具有较低和较高的限制:
a{2,} 匹配两个或更多个 a 在一起。
例如:a 不匹配,aa 匹配,aaa 匹配,aba 不匹配,aaaaaaaaa 匹配
a{2,5} 匹配两个到五个 a 在一起。
例如:a 不匹配,aa 匹配,aaa 匹配,aba 不匹配,aaaaaaaaa 不匹配
重复也适用于字符类,所以:
[a-z]{5} 匹配任意五个小写字母。
例如:bubba匹配,Bubba不匹配,BUBBA不匹配,asdjo匹配。
[A-Z]{2,5} 匹配两到五个大写字母。
例如:bubba不匹配,Bubba不匹配,BUBBA匹配,BUBBETTE不匹配。
[0-9]{4,8} 匹配四到八个数字。
例如:bubba不匹配,15835匹配,44不匹配,3456876353456不匹配。
[a3g]{2} 如果它们连续出现两次,则匹配a或3或g。
例如:aa匹配,ba不匹配,33匹配,38不匹配,a3不匹配。
现在让我们看看你的正则表达式:
[^a-z]|[^A-Z]
翻译:只要不是小写字母或大写字母,就匹配任何内容。
为了使其满足您的需求,我们将像这样重新编写它:
步骤1:删除否定。
[a-z]|[A-Z]
翻译:找到任何小写字母或大写字母。
步骤2:虽然不是必需的,但我们可以稍微清理一下OR逻辑。
[a-zA-Z]
翻译:找到任何小写字母或大写字母。与上面相同,但现在只使用单个[]。
第三步:现在让我们指定“长度”
[a-zA-Z]{1,25}
翻译:查找任何小写字母或大写字母重复一到二十五次。
这是有点棘手的地方。你可能认为你已经完成了,取决于你使用的技术,你可能真的完成了。
严格来说,正则表达式
[a-zA-Z] {1,25} 将匹配一到二十五个大写或小写字母
在任何地方在一行上:
[a-zA-Z] {1,25}
一个匹配,aZgD匹配,BUBBA匹配,243242hello242552
匹配
事实上,到目前为止我给出的每个示例都将执行相同的操作。如果这是你想要的,那么你就做得很好,但根据你的问题,我猜你只想要整行中的一到二十五个大写或小写字母。为此,我们转向锚点。锚允许我们指定那些令人讨厌的细节:
^ 行的开头
(我知道,我们刚刚在否定中使用了它,不要让我开始)
$ 行的结尾
我们可以这样使用它们:
^ a {3} 从行的开头匹配三次a
例如:aaa匹配,123aaa不匹配,aaa123匹配
a {3} $ 在行的末尾匹配三次a
例如:aaa匹配,123aaa匹配,aaa123不匹配
^a{3}$ 匹配整行中三个a连在一起的情况
例如:aaa匹配,123aaa不匹配,aaa123不匹配
需要注意的是,因为aaa在行首和行尾都有三个a,所以在所有情况下都会匹配。
因此,找到“长度最长为五个字符”的“单词”的最终、技术上正确的解决方案应该是:
^[a-zA-Z]{1,25}$
有趣的是,某些技术隐式地为您放置正则表达式锚点,而有些则没有。您只需要测试您的正则表达式或阅读文档以查看是否有隐式锚点。
RegexOptions.MultiLine
以澄清 ^ 和 $ 字符的含义。否则,提供的表达式看起来是完美的。+1 - Cerebrus