1

我想否定正则表达式模式的结果,以便它应该返回除正则表达式结果之外的所有内容。

示例字符串:

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

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

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

现在我想要除了上述结果之外的一切,即

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

我试图否定,但它不起作用。

任何帮助深表感谢。

4

1 回答 1

1

它可能过于复杂,但如果您需要多行匹配并且 smtp 帐户可以位于行首,则:

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

将匹配:

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

看看这里的一些测试。

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

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

于 2022-01-27T10:42:03.120 回答