正则表达式:如何使用正则表达式捕获特定的数字字符串,而不是当刺痛位于 URL 的文本中时?

REGEX: How to capture a certain string of numbers using regex but not when the sting is in the text of a URL?

我已经尝试找出解决此问题的正则表达式很长一段时间了,但一直没有成功,所以我正在寻求帮助。 我创建了一个正则表达式,当它们出现在电子邮件中时,它将捕获特定的数字字符串。问题是当它们在 URL 中时,它也会捕获这个特定的数字字符串。 URL 是随机生成的,并且在很多时候,它们包含一串与我的正则表达式匹配的数字。我一直在尝试创建一个正则表达式,它仍然会捕获特定的数字字符串,但当它位于 URL 内时会忽略该字符串,但没有成功。这是我一直在使用的正则表达式的示例。

    (?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b

这里是包含特定字符串的电子邮件示例。

https://test.test.test.outlook.com/?url=bunchofrandomstuffthatdoesnotmatterF&data=sfsfsdagfd4454366474retre45435700000000%7CRegex%randomthingsoiMC4wLjAwnotareallink2luMzIiLCJBTiIjfsdkljafdslflsdkajfljie

mailto: From: Sent: Monday, May 17, 2021 11:42 AM To: 700000000 . If received" Detected: External recipients,

https://test.test.test.outlook.com/?url=bunchofrandomstuffthatdoesnotmatterF&data=sfsfsdagfd4454366474retre45435700000000%7CRegex%randomthingsoiMC4wLjAwnotareallink2luMzIiLCJBTiIjfsdkljafdslflsdkajfljie

问题在于它正在捕获组成 URL 的文本中的数字和 mailto 行中的数字。如果可能的话,我需要一个正则表达式来捕获符合正则表达式标准的数字字符串在电子邮件中的任何位置,但在 URL.

中除外

我试过以下方法

(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b(?:(?!https://test.test.test.outlook.com).)

也不行。有什么想法吗?

Boost supports Perl Regular Expression Syntax, from which you can leverage backtracking control verbs (*SKIP)(*FAIL)

由于 url 是随机生成的,您可以使用 [=14 匹配 http://https:// 后跟 0 个或多个非空白字符,而不是排除 https://test.test.test.outlook.com =] 排除匹配 url.

然后你可以在交替后使用相同的模式|

注意对于当前示例数据,问题中的模式不匹配。我在 700000000 中添加了 2 个零以在示例数据中进行匹配。

\bhttps?://\S*(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b(*SKIP)(*F)|(?:700[0-9][0-9]{7}|81[0-9][0-9][0-9]{5}|9999[0-9]{8})\b

看到一个regex demo