gpt4 book ai didi

正则表达式 - 匹配 URL,除了个别情况

转载 作者:行者123 更新时间:2023-12-02 04:38:30 31 4
gpt4 key购买 nike

我有一个正则表达式模式,用于匹配 URL 广告的尝试。

[a-zA-Z0-9\-\.]+\s?
(\.|\(\.\)|dot|\(dot\)|-|;|:|,)\s
(com|org|net|cz|co|uk|sk|biz|mobi|xxx|eu|me)\b

我还让这个公式检测了超越保护的尝试,例如:

www-google-com or google-com (using '-' instead of '.')

问题

据报道,在葡萄牙语中,像

这样的词

"ganhou-me" or "fugiu-me"

是有效的,但仍然受到保护。连字符与“我”域一起使用,造成混淆。

我试图找到一种方法从表达式中排除该特定情况,但是:

  • 仍然能够检测到以下尝试:google.me 或 google;me
  • 但请忽略以下尝试:google-me 或 ganhou-me

我考虑过从主要表达式中删除“我”并添加一个包含该特定情况的析取,但这听起来像是最难的解决方案?

最佳答案

如果您不希望所有 -me 地址都匹配并且您的语言支持否定后视,您可以使用 [a-zA-Z0-9\-\.]+\s?(\.|\(\.\)|dot|\(dot\)|-|;|:|,)\s?(com|org|net|cz|co|uk|sk|biz|mobi|xxx|eu|(?<!-)me)\b或者这是一个前瞻版本 [a-zA-Z0-9\-\.]+\s?(\.|\(\.\)|dot|\(dot\)|-(?!me)|;|:|,)\s?(com|org|net|cz|co|uk|sk|biz|mobi|xxx|eu|me)\b .

这可以通过使用 (?<!-) 来实现在第一个匹配时检查“我”之前是否有 - 或使用此 -(?!me)检查第二个中的 - 之后是否有一个“我”。

这是它在 java 脚本示例中的工作。注意-我使用了第二个版本,因为 java 脚本不支持后视。

 var value = "www.google.com www.google;me www.google-me";
var matches = value.match(
new RegExp("[a-zA-Z0-9\\-\\.]+\s?(\\.|\\(\\.\\)|dot|\\(dot\\)|-(?!me)|;|:|,)\\s?(com|org|net|cz|co|uk|sk|biz|mobi|xxx|eu|me)\\b", "g")
);
document.writeln(matches);

当然,使用白名单(在上面的评论中建议)可能会更好,因为这是非常普遍的。

关于正则表达式 - 匹配 URL,除了个别情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708051/

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