java - 如果子字符串遵循该模式,则正则表达式返回 true

标签 java regex

我刚刚练习正则表达式,发现了一些有趣的东西

对于字符串

"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/

相关文章:

java - 两个内容相同的字符串会存储在同一个内存位置吗?

java - 使用多个java源文件编译多个jar文件时出错

java - 替换 HTTP 请求字符串中的 Host

javascript - AngularJS 不会覆盖内置验证器

php - 需要正则表达式来匹配特殊情况

c# - 正则表达式检查验证字符串是否有 0 个或多个数值和其他项目

java - Selenium 无法在 chrome 63 java 上启用 flash

java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信

jquery - 使用 jquery.validator.addMethod 时允许使用破折号的正确正则表达式是什么?

python - 仅当两个字符串不存在且另外两个字符串存在时,我才需要 python re 来匹配