正則表達式匹配網址(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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章