我正在尝试匹配不以字符串 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 只是匹配所有不以 String Line
或 line
开头的消息,它不检查匹配的子字符串 消息中的 TIMEKEEPER
、CLIENT
和 LAW 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)
- 开头不允许使用整个单词Line
或line
.*
- 任意 0+ 尽可能多的字符\b(TIMEKEEPER|CLIENT|LAW FIRM)\b
- 全部大写的 3 个完整单词中的任何一个.*$
- 该行的其余部分。
关于Java正则表达式检查是否不以特定字符串开头但包含多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005141/