1

我有一个字符串($string对于这个例子),我想做以下事情:

解析字符串并将其中的所有 url 转换为“实际链接”(添加打开/关闭锚标记)。

做这个的最好方式是什么?我尝试使用preg_split()创建字符串中包含的链接的数组,并str_replace()打算在事后使用来进行更改。但是,这种方法不起作用,因为我很难将文本字符串中的链接与preg_split().

$string可以在其中包含多个链接,这就是我采用这种方法的原因。如果我提前准确地知道链接是什么,或者如果str_replace()使用模式匹配,我就会被设置。

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

4

3 回答 3

3

这正是这种事情preg_replace的目的......

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);

编辑:whaddya 知道,“URL regex PHP”的热门 Google 命中: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);

请注意,如果您想完全匹配 URL,您将需要一个极其复杂的正则表达式,但要匹配大多数常见的 HTTP/HTTPS URL,上述正则表达式应该可以工作。

于 2009-02-24T01:57:53.233 回答
1

我认为您误解了preg_split(). 它用于根据正则表达式拆分字符串。例如,如果您有一个数据字符串“one1two2three3four”,您可以使用preg_split正则表达式“\d”,并且您将返回一个 4 元素数组,包括“one”、“two”、“three”、“four ”。

因此,除非链接始终由特定字符分隔,否则preg_split()不是适合该工作的工具。您可能希望使用preg_match()然后循环返回的不同匹配项。

编辑:或者正如大卫所说,preg_replace()甚至比preg_match().

于 2009-02-24T01:52:10.423 回答
0

正则表达式取决于链接的显示方式或它们可以出现的位置(在引号内、在自定义 HTML 标记内等)。

它还取决于输入的来源。如果它来自用户,使用类似 markdown 的语法可能是一个更好的主意。

无论如何,请查看:http ://regexlib.com/Search.aspx?k= links 以获得一些声称匹配 URI 等的正则表达式。然后,您将使用(最初由 David 发布):

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);
于 2009-02-24T02:06:39.157 回答