gpt4 book ai didi

正则表达式 - 比较两个捕获组

转载 作者:行者123 更新时间:2023-12-05 07:51:55 25 4
gpt4 key购买 nike

尝试创建一个正则表达式来限制我们的垃圾邮件摄入量。问题是,我并不完全精通正则表达式。我下面的工作成果主要是复制和粘贴、调整以及搜索有助于进一步调整的内容。

我决定要尝试的是使用正则表达式来匹配链接错误表示主机名的电子邮件。

例如:

<A HREF="http://phishers.org/we_want_your_money.htm">http://someLegitimateSite.com/somewhere </A>

我基本上只关心主机名,以限制误报并避免或多或少的合法链接,例如 A HREF...>单击此处!

到目前为止,我有这个:

(HREF="http[s]?:\/\/)(?'hostname1'(.*?))[:|\/|"].*?\"\>(http[s]?:\/\/)(?'hostname2'(.*?))[<|\/|:]

根据 https://regex101.com/我有两个命名的捕获组(hostname1 和 hostname2),以及一些我不确定自己是否关心的其他组。

如果主机名 1 和主机名 2 相同,我想做的是匹配字符串。我感觉它涉及后视或前瞻,但老实说我不知道​​。

编辑:感谢 Jan 制作原型(prototype)。根据他的回答中的评论,我做了一个快速添加,以添加图像标签的下落不明情况。对于大型网站(例如百思买),他们将图像存储在不同的内容服务器上,这会触发规则。我决定排除图像标签,我相信(在我非常非专家的意见中)我已经成功地做到了。 YMMV.

href=["']https?:\/\/(?<hostname>[^\/"]+)[^>]+>((?!<IMG).?)(?:https?:\/\/)?(?!.*\k'hostname')

最佳答案

这在某种程度上取决于您的编程语言。在 PHP 中,您可以想出某事。喜欢:

href=["']https?:\/\/(?<hostname>[^\/]+)[^>]+>(?:https?:\/\/)?\k'hostname'
# match href, =, a single/double quote, :// literally
# capture everything up to a forward slash (but not including) in a group called hostname
# followed by anything but >
# followed by >
# start a non capturing group (?:) with http/https://
# look if one can match the previously captured group called hostname

如果是这种情况,则可能不是垃圾链接(href 和链接文本匹配)。

概述:

<A HREF="http://phishers.org/we_want_your_money.htm">http://someLegitimateSite.com/somewhere </A>
<a href="https://example.com/subfolder">example.com</a> <-- will match, the others not
<a href="http://somebadsite.com">https://somegoodsite.com</a>

查看 working example here on regex101.com .

编辑:根据您的评论,您想要否定结果,这可以通过否定前瞻来完成:

href=["']https?:\/\/(?<hostname>[^\/"]+)[^>]+>(?:https?:\/\/)?(?!.*\k'hostname')
# same as before, except for the last part: (?!...)
# this one assures that the following group (hostname in our case) is not matched

查看此正则表达式的工作示例 here .

关于正则表达式 - 比较两个捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com