0

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

URL 将位于此位置:

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

(这只是一个示例 URL)

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

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

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

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

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

我的正则表达式不是很好,我还在学习。

谢谢你。

4

3 回答 3

0

下面的正则表达式会给你冒号前的 url 部分:

\[url=((http|https)?://)?[^\:]+
于 2013-09-04T16:09:08.153 回答
0

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

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

针对您的测试数据运行:

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

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

假设 PHP(因为您的测试 URL 用于 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

这也适用于其中包含冒号的 URL,例如:

http://www.php.net:8080/manual/en/function.preg-replace.php
http://www.php.net/manual/us:en/function.preg-replace.php
于 2013-09-04T16:09:58.103 回答
0

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

于 2013-09-04T16:12:18.330 回答