我刚刚练习正则表达式,发现了一些有趣的东西
对于字符串
"world9 a9$ b6$"
我的正则表达式 "^(?=.*[\\d])(?=\\S+\\$).{2, }$"
将返回 false,因为在向前查找至少包含一位数字和非空格字符的 $ 符号之前,中间有空格。
作为一个整体,字符串与模式不匹配。
如果即使子字符串遵循某种模式我也想返回 true,那么正则表达式应该是什么? 就像这个 a9$ 和 b6$ 都遵循正则表达式。
最佳答案
你可以使用
^(?=\D*\d)(?=.*\S\$).{2,}$
请参阅regex demo 。如The fourth bird mentions ,由于 \S\$
匹配两个字符,您可以简单地将模式移动到使用部分,并使用 ^(?=\D*\d).*\S\$。 *$
,参见this regex demo .
详细信息
^
- 字符串开头(如果在.matches()
中使用则隐式)(?=\D*\d)
- 正向前瞻,需要零个或多个非数字字符,后跟紧邻当前位置右侧的数字字符(?=.*\S\$)
- 正向先行,需要除换行符之外的零个或多个字符,尽可能多,后跟一个非空白字符和一个$
紧邻当前位置右侧的字符.{2,}
- 除换行符之外的任意两个或多个字符,尽可能多$
- 字符串结尾(如果在.matches()
中使用则隐含)
关于java - 如果子字符串遵循该模式,则正则表达式返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65076058/