我正在尝试实现的正则表达式应该匹配以下数据:
12345612345 23456 51 2 2345 它不应与以下内容匹配:
12 4561234 6 1 61 6它应该是6个字符,包括数字,前导和尾随空格.它也可以是6个字符的空格.如果使用数字,则它们之间应该没有空格.
我尝试了以下表达式无济于事:
^\s*[0-9]{6}$
Run Code Online (Sandbox Code Playgroud)
\s*[0-9]\s*
Run Code Online (Sandbox Code Playgroud)
Wik*_*żew 42
您可以使用 *\d* *具有限制性(?=.{6}$)前瞻的模式:
^(?=.{6}$) *\d* *$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
说明:
^ - 字符串的开头(?=.{6}$) - 字符串应该只有6个换行符以外的任何字符 *- 0 +常规空间(注意匹配水平空间 - 使用[^\S\r\n])\d* - 0+位数 * - 0 +常规空间$ - 字符串结尾.Java演示(最后4个是应该失败的测试用例):
List<String> strs = Arrays.asList("123456", "12345 ", " 23456", " 5", // good
"1 ", " ", " 2 ", " 2345 ", // good
"12 456", "1234 6", " 1 6", "1 6"); // bad
for (String str : strs)
System.out.println(str.matches("(?=.{6}$) *\\d* *"));
Run Code Online (Sandbox Code Playgroud)
请注意,在使用时String#matches(),您不需要初始^和最终$锚点,因为默认情况下通过锚定模式,方法需要完整的字符串匹配.
你也可以这样做:
^(?!.*?\d +\d)[ \d]{6}$
Run Code Online (Sandbox Code Playgroud)
零宽度负向前瞻(?!.*?\d +\d)确保未选择在数字之间具有空格的线
[ \d]{6} 匹配具有六个只包含空格和/或数字的字符的所需行.