Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将字符串中的所有URL转换为锚定_Php_Regex_String_Parsing_Hyperlink - Fatal编程技术网

Php 将字符串中的所有URL转换为锚定

Php 将字符串中的所有URL转换为锚定,php,regex,string,parsing,hyperlink,Php,Regex,String,Parsing,Hyperlink,我有一个字符串(本例中为$string),我想执行以下操作: 解析字符串并将其中的所有URL转换为“实际链接”(添加打开/关闭锚定标记) 最好的方法是什么?我尝试使用preg_split()创建字符串中包含的链接数组,并在事后使用str_replace()进行更改。但是,这种方法不起作用,因为我很难用preg_split()隔离文本字符串中的链接 $string可以在其中包含多个链接,这就是我采用这种方法的原因。如果我提前准确地知道链接是什么,或者如果str_replace()使用模式匹配,我就

我有一个字符串(本例中为
$string
),我想执行以下操作:

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

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

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


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

我认为您误解了
preg\u split()
的目的。它用于根据正则表达式拆分字符串。例如,如果您有一个数据字符串“one1two2tree3four”,您可以使用带有“\d”正则表达式的
preg\u split
,然后返回一个由“一”、“二”、“三”、“四”组成的4元素数组

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


编辑:或者正如David所说,
preg\u replace()
甚至比
preg\u match()

我认为你误解了
preg\u split()的目的。它用于根据正则表达式拆分字符串。例如,如果您有一个数据字符串“one1two2tree3four”,您可以使用带有“\d”正则表达式的
preg\u split
,然后返回一个由“一”、“二”、“三”、“四”组成的4元素数组

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


编辑:或者正如David所说,
preg\u replace()
甚至比
preg\u match()

这正是
preg\u replace
的目的

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);
preg_replace(“/your-URL regex/”,“$string”);
编辑:你知道吗,谷歌最热门的“URL正则表达式PHP”:

#PHP示例:自动链接URL的内部文本。
$text=preg_replace('@(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+)),'','$text);

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

这正是
preg\u replace
的目的

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);
preg_replace(“/your-URL regex/”,“$string”);
编辑:你知道吗,谷歌最热门的“URL正则表达式PHP”:

#PHP示例:自动链接URL的内部文本。
$text=preg_replace('@(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+)),'','$text);

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

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

这还取决于输入来自何处。如果它来自用户,那么最好使用类似标记的语法

无论如何,请查看:一些声称与URI等匹配的正则表达式。然后您将使用(最初由David发布):

preg_replace(“/your-URL regex/”,“$string”);

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

这还取决于输入来自何处。如果它来自用户,那么最好使用类似标记的语法

无论如何,请查看:一些声称与URI等匹配的正则表达式。然后您将使用(最初由David发布):

preg_replace(“/your-URL regex/”,“$string”);

除了我下面的回答之外,如果你给出一些你想要拆分的字符串的例子,我可以给你一些关于正则表达式的更具体的帮助。我在寻找一个能够读取所有URL的正则表达式时遇到了一些大问题:例如:/2009/feb/17/gop assembly caucus中的caucus——在-flash之前拿出你的-/it面包。”@(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+))@'=regex@NicholasKreidberg您的已注释示例字符串应作为编辑包含在问题中。除了我下面的回答之外,如果您给出一些要拆分的字符串示例,我可以在正则表达式方面给你一些更具体的帮助。我在寻找一个能够获取所有URL的正则表达式时遇到了一些重大问题:例如:/2009/2月/17日/gop大会核心小组内的核心小组----在-flash之前拿出你的-/it面包。”@(https?:/([-\w\.]+)+(:\d+)(/([\w/\.]*(\?\S+))@'=regex@NicholasKreidberg你的注释样本字符串应该作为编辑包含在问题中。绝对完美的David,我把它做得比需要的复杂得多。谢谢你。试图想出一个能容纳URL的正则表达式,比如:/2009/2月/17/共和党大会核心小组内的核心小组----拿出你的-/--它会在“-flash”处中断,找出匹配URL的正确正则表达式可能值得问一个自己的问题(可能已经问过了)绝对完美的David,我把事情弄得比需要的复杂得多。谢谢。正在尝试使用正则表达式来容纳URL,如:/2009/2/17/caucus wit
preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);