正则表达式匹配网址(PHP示例)

正则表达式匹配网址


正则表达式:

这有一个 Markdown 的作者之一写的正则表达式,他把这个表达式都改进了好几年了,应该比较全面而且保险:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))

查看该作者原文


PHP示例代码:
<?php
//注意,这里把上面的正则表达式中的单引号用反斜杠转义了,不然没法放在字符串里
$regex = '@(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))@';
var_dump( preg_match($regex, 'http://segmentfault.com/q/1010000000584340') );  //true
?>


附:PHP正则表达式匹配:
preg_match_all()函数:用于执行一个全局正则表达式匹配,将实现全部结果的匹配。
preg_match()函数:匹配成功一次后停止匹配。

示例代码:
<?php
$str = '<b>example: </b><div align=left>this is a test</div>';
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $str, $matchs);
echo $matchs[0][0] . ", " . $matchs[0][1] . "\n";
echo $matchs[1][0] . ", " . $matchs[1][1] . "\n";
?>
代码说明:
$matchs数组下标0的结果($matchs[0])是整个表达式的匹配结果,下标1的结果($matchs[1])是第一个小括号里的表达式 (.*) 的匹配结果,如果还有第二,第三个括号,那么以此类推。


--------------------------------------------------------------------------------

参考文章出处:

https://segmentfault.com/q/1010000000584340

https://www.hi-docs.com/php/preg_match_all.html

http://baike.baidu.com/link?url=Z1z4Ihhzt3WbvA7lDE83hO19pK-bPQwM3UPTxnA27T3OhaO4xx6bDmeemjbb4yu45sKFQ7Bcn1yYWWygtEJH7wpBAEXT7ZmMk3_6zAUL0d7


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值