为伪正则表达式提供示例:根据PHP regexp语法匹配除example.com和example2.com以外的每个url。PHP正则表达式匹配除Example.com以外的任何URL
这里是我到目前为止,但它不工作:
$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i";
为伪正则表达式提供示例:根据PHP regexp语法匹配除example.com和example2.com以外的每个url。PHP正则表达式匹配除Example.com以外的任何URL
这里是我到目前为止,但它不工作:
$patternToMatch = "@https?://[^(example.com|example2.com)]\"*@i";
这里的问题是,一个类定义中([]
)特殊字符,如(
和|
失去了意义。
更好的解决方案是在example.com或example2.com上进行匹配,然后仅进行负面测试。
感谢Segfault,看起来我必须删除所有example.com网址,然后搜索任何剩余的网址,对吗?再次感谢! – darkAsPitch 2010-03-01 20:47:05
不要使用正则表达式的东西你不需要。
$parts = parse_url($url);
if ($parts && $parts['host'] != 'example.com' && $parts['host'] != 'example2.com') {
// the URL seems OK
}
Lukas,我试图从文本文档中提取网址。我手边没有这些网址。我确实需要正则表达式。 – darkAsPitch 2010-03-01 20:40:08
不,方括号内的内容只会匹配一个字符。例如,正则表达式:
[^example]
将比e
,x
,a
,m
,p
,l
和e
匹配任何单个字符以外。
尝试负lookahead:
@https?://(www\.)?(?!example2?.com)@i
你几乎拥有了答案。 这将做你想要的匹配。
$patternToMatch = "@https?://(example.com|example2.com)@i";
感谢aberpaul,但看起来它只会找到example.com和example2.com - 我想要的一切,但example.com和example2.com – darkAsPitch 2010-03-02 00:26:36
我假设(也许错了),你将能够使用PHP?检查匹配是否返回true/false。沿着这些线我可以看到段错误思想。 – aberpaul 2010-03-03 17:09:05
这功课吗?如果是这样,请标记为。 – 2010-03-01 20:04:01
哈哈,没有。这不是功课。我只是新的正则表达式。但感谢侮辱!如何回答? – darkAsPitch 2010-03-01 20:39:49
不是侮辱;只是质量控制。通常以这种方式表达的问题是 - 看看第一段看起来有点像作业的要求。这是所有:) – Matchu 2010-03-01 21:50:03