2010-03-01 91 views
0

为伪正则表达式提供示例:根据PHP regexp语法匹配除example.com和example2.com以外的每个url。PHP正则表达式匹配除Example.com以外的任何URL

这里是我到目前为止,但它不工作:

$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i"; 
+0

这功课吗?如果是这样,请标记为。 – 2010-03-01 20:04:01

+0

哈哈,没有。这不是功课。我只是新的正则表达式。但感谢侮辱!如何回答? – darkAsPitch 2010-03-01 20:39:49

+0

不是侮辱;只是质量控制。通常以这种方式表达的问题是 - 看看第一段看起来有点像作业的要求。这是所有:) – Matchu 2010-03-01 21:50:03

回答

1

这里的问题是,一个类定义中([])特殊字符,如(|失去了意义。

更好的解决方案是在example.com或example2.com上进行匹配,然后仅进行负面测试。

+0

感谢Segfault,看起来我必须删除所有example.com网址,然后搜索任何剩余的网址,对吗?再次感谢! – darkAsPitch 2010-03-01 20:47:05

2

不要使用正则表达式的东西你不需要。

$parts = parse_url($url); 
if ($parts && $parts['host'] != 'example.com' && $parts['host'] != 'example2.com') { 
    // the URL seems OK 
} 
+0

Lukas,我试图从文本文档中提取网址。我手边没有这些网址。我确实需要正则表达式。 – darkAsPitch 2010-03-01 20:40:08

1

不,方括号内的内容只会匹配一个字符。例如,正则表达式:

[^example] 

将比example匹配任何单个字符以外。

尝试负lookahead

@https?://(www\.)?(?!example2?.com)@i 
0

你几乎拥有了答案。 这将做你想要的匹配。

$patternToMatch = "@https?://(example.com|example2.com)@i"; 
+0

感谢aberpaul,但看起来它只会找到example.com和example2.com - 我想要的一切,但example.com和example2.com – darkAsPitch 2010-03-02 00:26:36

+0

我假设(也许错了),你将能够使用PHP?检查匹配是否返回true/false。沿着这些线我可以看到段错误思想。 – aberpaul 2010-03-03 17:09:05