java风格的正则表达式:如果组是n个字符,则匹配整个字符串



我试图为字符串验证器创建一个正则表达式。我的字符串必须正好是8个字符长,并以字母(小写或大写)或数字开头。它只能包含字母(小写和大写)、数字或第一个字符后面的空白。如果发现了空格,则后面只能有空格

现在,我有第二部分的匹配组:[a-zA-Z0-9]{1,}s*

我找不到一种方法来指定只有当该组恰好有8个字符时才匹配该组。我尝试了^([a-zA-Z0-9]{1,}s*){8}$,但这不是预期的结果。

下面是一些测试用例(后面有空格)。

有效:

9013    
20130   
89B     
A5000000
无效:

9013     
 20130  
90 90   
123456789   

可能有一种聪明的正则表达式方法可以做到这一点,但你也可以先检查字符串的长度:

input.length() == 8 && input.matches("[a-zA-Z0-9]+\s*")

这也可能比一个复杂的正则表达式更有效。

你可以使用这个基于前瞻的正则表达式:

^[a-zA-Z0-9](?!.* [a-zA-Z0-9])[a-zA-Z0-9 ]{7}$

RegEx演示

  • ^[a-zA-Z0-9]在开头匹配一个大写字符
  • (?!.* [a-zA-Z0-9])是负向前看的,以确保没有后跟空格的字母num字符实例。
  • [a-zA-Z0-9 ]{7}$匹配包含字母num字符或空格的7个字符。

最新更新