正则表达式检查没有句子

RegEx to check not to have a sentence

我有 regex1 = "^Line\s(?:(\d+)\s)?\s*:\s+(\d+)?.+"; 来匹配 Groovy

中的以下行
def msg1 = "Line : 1 Invoice does not foot Reported"
def msg2 = "Line : 2 Could not parse INVOICE_DATE value"
def msg5 = "Line 3 : Could not parse ADJUSTMENT_AMOUNT value"
def msg6 = "Line 4 : MATH ERROR"

现在我正在尝试匹配没有 Invoice does not foot Reported 句子的消息,所以我调整了正则表达式如下

def regex2 = "^Line\s(?:(\d+)\s)?\s*:\s+(\d+)?((?!Invoice does not foot Reported).).+"

当我执行 msg1.matches(regex2) 时,我得到的结果是 true 而不是 true 而不是 false。

有人可以帮我解决这个问题吗?

只需在第二个 \d+ 之后添加否定前瞻,不要忘记将 .*? 放入否定前瞻断言中。

"^Line\s(?:(\d+)\s)?\s*:\s+(\d+)?(?!.*?\bInvoice does not foot Reported).+"

示例:

String msg1 = "Line : 1 Invoice does not foot Reported";
String msg2 = "Line : 2 Could not parse INVOICE_DATE value";
String msg5 = "Line 3 : Could not parse ADJUSTMENT_AMOUNT value";
String msg6 = "Line 4 : MATH ERROR";
System.out.println(msg1.matches("Line\s(?:(\d+)\s)?\s*:\s+(\d+)?(?!.*?\bInvoice does not foot Reported).+"));
System.out.println(msg2.matches("Line\s(?:(\d+)\s)?\s*:\s+(\d+)?(?!.*?\bInvoice does not foot Reported).+"));
System.out.println(msg5.matches("Line\s(?:(\d+)\s)?\s*:\s+(\d+)?(?!.*?\bInvoice does not foot Reported).+"));
System.out.println(msg6.matches("Line\s(?:(\d+)\s)?\s*:\s+(\d+)?(?!.*?\bInvoice does not foot Reported).+"));

输出:

false
true
true
true