我需要一个正则表达式模式来匹配复杂环境中的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.,/_-]+
我在正则表达方面不是很好,我还在学习。
谢谢。
答案 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(因为您的测试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
这也适用于包含冒号的网址,例如:
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)?:\/\/)?[^]^(^)^ ]+