要检查的Java RegEx是否以特定字符串开头但包含多个字符串

时间:2017-10-29 20:54:01

标签: java regex string groovy

我正在尝试匹配不以字符串Lineline开头的字符串消息,但使用下面的字符串TIMEKEEPERCLIENTLAW 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只是匹配所有不以字符串Lineline开头的消息,它不会检查匹配的子字符串TIMEKEEPER,{{1邮件中包含{}和CLIENT。 ABove RegEX不应该匹配以下消息,但RegEX也会对以下消息返回true,有人可以帮我修复RegEX,以便不匹配以下类型的消息。

LAW FIRM

2 个答案:

答案 0 :(得分:2)

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

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

请参阅regex demo

<强>详情

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

答案 1 :(得分:0)

您是否尝试匹配所有子字符串TIMEKEEPER,CLIENT和LAW FIRM,或至少一个?坦率地说,当Java具有非常好的String#startsWith()方法时,这似乎是对正则表达式的滥用。你只是在这里寻找一小组文字子串。