[英]Regular Expression HREF Selection Incomplete
這是此處另一篇文章的后續文章。
問題:鏈接沒有完全用HREF包裹,這意味着URL的僅一部分被鏈接標記包圍。 檢測字符串上的鏈接的函數。
如果字符串包含http://t.co/thions43
則僅在鏈接標記內返回部分http://t.co/thi
。
<?php
function makeLink($match) {
// Parse link.
$substr = substr($match, 0, 6);
if ($substr != 'http:/' && $substr != 'https:' && $substr != 'ftp://' && $substr != 'news:/' && $substr != 'file:/') {
$url = 'http://' . $match;
} else {
$url = $match;
}
return '<a href="' . $url . '">' . $match . '</a>';
}
function makeHyperlinks($text) {
// Find links and call the makeLink() function on them.
return preg_replace('/((www\.|(http|https|ftp|news|file)+\:\/\/)[_.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])/e', "makeLink('$1')", $text);
}
?>
根據您的評論,您必須使正則表達式不區分大小寫,也可以簡化:
return preg_replace('/((www\.|(http|https|ftp|news|file)+\:\/\/)[_.a-z0-9-]+\.[a-z0-9\/_:@=.+?,#%&~-]*[^.\'# !(?,><;\)])/ie', "makeLink('$1')", $text);
您也可以使用\\w
代替[a-zA-Z0-9_]
並且不需要i標志:
'/((www\.|http|https|ftp|news|file):\/\/[\w.-]+\.[\w\/:@=.+?,#%&~-]*[^.\'"# !(?,><;\)])/e'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.