我有一个正则表达式模式,用于匹配网址广告的尝试。
[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"一起使用。领域并导致混淆。
我试图找到一种方法从表达式中排除该特定情况,但是:
我想要删除" me"从主表达式中添加一个包含该特定情况的分离,但这听起来像是最难的解决方案?
答案 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。
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;
当然最好使用白名单(在上面的评论中提出),因为这是非常笼统的。