正則表示式匹配網址(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])是第一個小括號裡的表示式 (.*) 的匹配結果,如果還有第二,第三個括號,那麼以此類推。
--------------------------------------------------------------------------------
參考文章出處: