代码之家  ›  专栏  ›  技术社区  ›  niczak

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

  •  1
  • niczak  · 技术社区  · 15 年前

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

    $string可以在其中包含多个链接,所以这就是我使用这种方法的原因。如果我提前知道了具体的链接,或者str_替换为模式匹配,我将被设置。

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

    • 尼古拉斯
    3 回复  |  直到 15 年前
        1
  •  3
  •   David Z    15 年前

    这正是那种 preg_replace 是为了…

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

    编辑 :whaddya know,“url regex 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);
    

    请注意,如果您希望完全通用地匹配URL,您需要一个非常复杂的正则表达式,但是为了匹配最常见的HTTP/HTTPS URL,上面的regex应该可以工作。

        2
  •  1
  •   Chad Birch    15 年前

    我认为你误解了 preg_split() . 它用于根据regex拆分字符串。例如,如果您有一个数据字符串“one1two2three34”,则可以使用 preg_split 当regex为“\d”时,将返回一个由“1”、“2”、“3”、“4”组成的4元素数组。

    所以除非链接总是由特定的字符分隔, Prgg-分裂() 不适合做这个工作。你可能想用 preg_match() 然后循环返回的不同匹配项。

    编辑:或者如大卫所说, preg_replace() 甚至比 预匹配() .

        3
  •  0
  •   Nick Presta    15 年前

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

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

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

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