将URL与其他字符匹配

时间:2013-09-04 15:58:43

标签: regex

我需要一个正则表达式模式来匹配复杂环境中的URL。

网址将位于此位置:

[url=http://www.php.net/manual/en/function.preg-replace.php:32p0eixu]TEST[/url:32p0eixu]

(这只是一个示例网址)

我需要匹配URL,直到冒号,冒号和之后的代码应该被忽略。那里有很多网址,我没有经验可以创建一个模式来匹配从 http:// 的所有内容:

正如我所说,除了我需要存储在变量中的URL之外,其他所有内容都应该被忽略。

有人可以帮我创建这样的模式吗?我的尝试与上面的网址匹配,但是当我输入更复杂的网址时,它们就不匹配了。

这是我创建的模式。它适用于简单的URL,但不适用于复杂的URL:

http(s)?://[A-Za-z0-9.,/_-]+

我在正则表达方面不是很好,我还在学习。

谢谢。

3 个答案:

答案 0 :(得分:0)

在regex下面会给你冒号前的url部分:

\[url=((http|https)?://)?[^\:]+

答案 1 :(得分:0)

这个正则表达式应该为你做。

\[url=(.*?):[a-zA-Z0-9]*\]

针对您的测试数据运行:

[url=http://www.php.net/manual/en/function.preg-replace.php:32p0eixu]TEST[/url:32p0eixu]

这将返回捕获组1中的URL。

假设PHP(因为您的测试U​​RL是针对PHP手册的),您可以像preg_match这样使用它:

$value = "[url=http://www.php.net/manual/en/function.preg-replace.php:32p0eixu]TEST[/url:32p0eixu]";
$pattern = "/\[url=(.*?):[a-zA-Z0-9]*\]/";
preg_match($pattern, $value, $matches);
echo $matches[1];

输出:

http://www.php.net/manual/en/function.preg-replace.php

这也适用于包含冒号的网址,例如:

http://www.php.net:8080/manual/en/function.preg-replace.php
http://www.php.net/manual/us:en/function.preg-replace.php

答案 2 :(得分:0)

这个怎么样: ^(http(s)?:\/\/)?[^]^(^)^ ]+