Java正则表达式检查是否不以特定字符串开头但包含多个字符串

标签 java regex string groovy

我正在尝试匹配不以字符串 Lineline 开头但具有子字符串 TIMEKEEPER,CLIENT< 的字符串消息LAW FIRM 使用下面的正则表达式

def regEX = "^((?!(Line|line)+).).?(\\bTIMEKEEPER\\b|\\bCLIENT\\b|\\bLAW FIRM\\b|).*\$"

下面是一些示例消息。

Line 1 : Missing required fields //returns false as expected
line 2 : No Delimiter //returns false as expected
PL is not approved TIMEKEEPER //returns true as expected
CLIENT  ABC is not authorized  //returns true as expected
LAW FIRM address is required //returns true as expected

但问题是,上面的 RegEX 只是匹配所有不以 String Lineline 开头的消息,它不检查匹配的子字符串 消息中的 TIMEKEEPERCLIENTLAW FIRM。 A以上 RegEX 不应匹配以下消息,但 RegEX 对于以下消息也返回 true,有人可以帮我修复 RegEX 使其不匹配以下类型的消息。

address is required //returns true instead of false
ABC is not authorized //returns true instead of false

最佳答案

您可以使用这样的正则表达式(用斜杠字符串定义):

def regEx = /^(?![Ll]ine\b).*\b(TIMEKEEPER|CLIENT|LAW FIRM)\b.*$/

请参阅regex demo

详细信息

  • ^ - 字符串开头
  • (?![Ll]ine\b) - 开头不允许使用整个单词 Lineline
  • .* - 任意 0+ 尽可能多的字符
  • \b(TIMEKEEPER|CLIENT|LAW FIRM)\b - 全部大写的 3 个完整单词中的任何一个
  • .*$ - 该行的其余部分。

关于Java正则表达式检查是否不以特定字符串开头但包含多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005141/

相关文章:

c# - 什么是显示 XOR 语句的优雅方式

regex - 匹配 Perl 中的最后一个正则表达式模式

c# - 正则表达式匹配以@开头的单词

java - 我的 Treeset 仅添加 1 个类对象

java - 在 Java 中通过反射获取通用信息

ruby - 正则表达式 (\d{3})(?=\d) 是什么意思?

java - 访问字符串中超过 2^31 个字符的字符

python - 将字符串分解为变量

c# - 如何在c#中以反向模式做子串

java - 如何使用intellij正确远程调试pod?