我有一个字符串(此示例为$ string),我想执行以下操作:解析字符串并将其中的所有链接转换为“实际链接”(添加打开/关闭锚标记) - 什么是最好的办法吗?我尝试使用preg_split()来创建字符串中包含的链接数组,并在事实之后使用str_replace()进行更改。然而,这种方法不起作用,因为我很难隔离文本字符串中的链接w / preg_split()。
$ string可能包含几个链接,这就是我采用这种方法的原因。如果我确切地知道链接提前是什么,或者如果str_replace使用模式匹配,我将被设置。
简而言之,我不认为上述方法是最好的方法。什么是更好的方法?
答案 0 :(得分:3)
这正是preg_replace
的目的......
preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);
编辑:whaddya知道,谷歌搜索“URL正则表达式PHP”:http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/
# PHP Example: Automatically link URL's inside text.
$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);
请注意,如果您想要完全一般性地匹配网址,则需要一个非常复杂的正则表达式,但为了匹配大多数常见的HTTP / HTTPS网址,上述正则表达式应该可以正常工作。
答案 1 :(得分:1)
我认为你误解了preg_split()
的目的。它用于根据正则表达式拆分字符串。例如,如果你有一个数据字符串“one1two2three3four”,你可以使用preg_split
的正则表达式为“\ d”,你将得到一个返回的4元素数组,包括“一个”,“两个”,“三个“,”四个“。
因此,除非链接始终由特定字符分隔,否则preg_split()
不适合作业。您可能希望使用preg_match()
,然后循环返回的不同匹配项。
编辑:或正如大卫所说,preg_replace()
甚至比preg_match()
更好。
答案 2 :(得分:0)
正则表达式取决于链接的显示方式或显示位置(在引号内,自定义HTML标记内等)。
它还取决于输入的来源。如果它来自用户,那么使用类似markdown的语法可能更好。
无论如何,请查看:http://regexlib.com/Search.aspx?k=links,了解一些声称与URI匹配的正则表达式。然后你会使用(最初由David发布):
preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);