我正在尝试匹配不以字符串Line
或line
开头的字符串消息,但使用下面的字符串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只是匹配所有不以字符串Line
或line
开头的消息,它不会检查匹配的子字符串TIMEKEEPER
,{{1邮件中包含{}和CLIENT
。
ABove RegEX不应该匹配以下消息,但RegEX也会对以下消息返回true,有人可以帮我修复RegEX,以便不匹配以下类型的消息。
LAW FIRM
答案 0 :(得分:2)
您可以使用这样的正则表达式(使用斜线字符串定义):
def regEx = /^(?![Ll]ine\b).*\b(TIMEKEEPER|CLIENT|LAW FIRM)\b.*$/
请参阅regex demo
<强>详情
^
- 字符串开头(?![Ll]ine\b)
- 一开始就不允许使用全文Line
或line
.*
- 尽可能多的0个字符\b(TIMEKEEPER|CLIENT|LAW FIRM)\b
- ALLCAPS中的3个完整单词.*$
- 其余部分。答案 1 :(得分:0)
您是否尝试匹配所有子字符串TIMEKEEPER,CLIENT和LAW FIRM,或至少一个?坦率地说,当Java具有非常好的String#startsWith()
方法时,这似乎是对正则表达式的滥用。你只是在这里寻找一小组文字子串。