否定正则表达式模式的输出

Negate the output of the regex pattern

我想否定正则表达式模式的结果,因此它应该 return 除正则表达式结果之外的所有内容。

示例字符串:

SMTP:test.abc@xyz.com;smtp:test.123@xyz.biz;sip:test.123@xyz.biz

我写了一个下面的正则表达式,输出为- test.abc@xyz.com

(?<=SMTP:)(.*?)(?=;)

现在我想要除上述结果之外的所有内容,即

SMTP:;smtp:test.abc@xyz.biz;sip:test.abc@xyz.biz

我正在尝试否定,但它不起作用。

非常感谢任何帮助。

可能过于复杂了,但是如果你需要多行匹配,smtp账号可以在一行的开头,这个:

(SMTP:)|(;[^(SMTP)]*)|(^[^(SMTP)]*)

将匹配:

  • SMTP:
  • ; 之后的任何内容,直到另一个 SMTP
  • 一行开头的任何内容(不需要 ;)直到另一个 SMTP

看看some tests here.

如果电子邮件名称中包含 SMTP,这可能会崩溃,但我希望你不会有任何内容。

另一种方法是使用匹配的正则表达式 (?<=\SMTP:)(.*?)(?=\;),并不断从字符串中删除匹配的内容。