正则表达式 - 匹配除孤立案例之外的URL

时间:2016-09-26 16:38:57

标签: regex

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

[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"或者" fugiu-me"

有效且仍然受到保护。连字符与" me"一起使用。领域并导致混淆。

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

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

我想要删除" me"从主表达式中添加一个包含该特定情况的分离,但这听起来像是最难的解决方案?

1 个答案:

答案 0 :(得分:0)

如果您希望所有-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)检查是否有一个&#39; me&#39;之后 - 在第二个。

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

&#13;
&#13;
 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);
&#13;
&#13;
&#13;

当然最好使用白名单(在上面的评论中提出),因为这是非常笼统的。