Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java风格的正则表达式:如果组为n个字符,则匹配整个字符串_Java_Regex - Fatal编程技术网

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

Java风格的正则表达式:如果组为n个字符,则匹配整个字符串,java,regex,Java,Regex,我正在尝试为字符串验证器创建一个正则表达式。我的字符串长度必须正好为8个字符,并且以字母(小写或大写)或数字开头。它只能在第一个字符后面包含字母(小写和大写)、数字或空格。如果找到一个空格,则后面只能有空格 现在,我有第二部分的匹配组:[a-zA-Z0-9]{1,}\s* 我找不到一种方法来指定此组只有在正好有8个字符时才匹配。我尝试了^([a-zA-Z0-9]{1,}\s*){8}$,但这不是预期的结果 下面是一些测试用例(带有尾随空格) 有效: 9013 20130 89B

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

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

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

下面是一些测试用例(带有尾随空格)

有效:

9013    
20130   
89B     
A5000000
9013     
 20130  
90 90   
123456789   
无效:

9013    
20130   
89B     
A5000000
9013     
 20130  
90 90   
123456789   

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

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

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

可能有一种智能正则表达式方法,但您也可以先检查字符串的长度:

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

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

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

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

  • ^[a-zA-Z0-9]
    在开始时匹配alpha-num字符
  • (?!.[a-zA-Z0-9])
    为负前瞻,以确保没有后跟空格的alpha-num字符实例
  • [a-zA-Z0-9]{7}$
    匹配包含alpha-num字符或空格的7个字符

您可以使用此基于前瞻的正则表达式:

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

  • ^[a-zA-Z0-9]
    在开始时匹配alpha-num字符
  • (?!.[a-zA-Z0-9])
    为负前瞻,以确保没有后跟空格的alpha-num字符实例
  • [a-zA-Z0-9]{7}$
    匹配包含alpha-num字符或空格的7个字符

9013只有4个字符长的有效输入是什么?如果字符串长度必须正好是8个字符,那么9013、20130和89B为什么有效?anubhava末尾有4个空格
9013
只有4个字符长的有效输入是什么?如果字符串长度必须正好是8个字符,那么9013为什么有效,20130和89B有效吗?@anubhava结尾处有4个空格,因为您在前面检查了长度,所以可以将
{1,8}
更改为
+
。我认为没有任何“智能”正则表达式可以击败解耦全局长度和序列要求的简单性。不幸的是,我使用的是现成的企业“工具”(spring batch tasklet),它只能将正则表达式作为参数。否则,您的解决方案会更简单,无论如何,谢谢!因为您之前检查了长度,所以您可以将
{1,8}
更改为
+
。我不认为有任何“智能”正则表达式,它可以击败解耦合全局长度和序列要求的简单性。不幸的是,我使用的是开箱即用的企业“工具”(spring batch tasklet),它只能以正则表达式作为参数。否则,您的解决方案会更容易,无论如何,谢谢!