preg_split()并将字符串中的所有链接转换为锚点?

时间:2009-02-24 01:47:53

标签: php regex parsing string

我有一个字符串(此示例为$ string),我想执行以下操作:解析字符串并将其中的所有链接转换为“实际链接”(添加打开/关闭锚标记) - 什么是最好的办法吗?我尝试使用preg_split()来创建字符串中包含的链接数组,并在事实之后使用str_replace()进行更改。然而,这种方法不起作用,因为我很难隔离文本字符串中的链接w / preg_split()。

$ string可能包含几个链接,这就是我采用这种方法的原因。如果我确切地知道链接提前是什么,或者如果str_replace使用模式匹配,我将被设置。

简而言之,我不认为上述方法是最好的方法。什么是更好的方法?

  • 尼古拉斯

3 个答案:

答案 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);