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

PHP正则表达式跳过元素

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

    我已经写了正则表达式,将文本链接转换成可点击的链接。代码运行良好,但是当传递HTML标记时,它会弄乱代码

    这是我的密码

    $text = preg_replace('#(?<![">])((http|ftp)s?://[^<>\s]+)#i', '<a href="\\0">\\0</a>', $text );
    

    <a href="http://www.yahoo.com">Yahoo</a>
    

    谢谢

    2 回复  |  直到 15 年前
        1
  •  0
  •   rubber boots    15 年前

    在用两个输入检查代码之后:

    $text1 = '<a href="http://www.yahoo.com">Yahoo</a>';
    $text2 = 'text text http://www.yahoo.com text';
    
    $reg = '{
             (?<![">])
             (
               (?:http|ftp)s? : // [^<>\s]+
             )
            }ix';
    
    echo  preg_replace($reg, '<A HREF="\1">\1</A>', $text1 ) . "\n";
    echo  preg_replace($reg, '<A HREF="\1">\1</A>', $text2 ) . "\n";
    

    并读取相应的输出:

    => #1 not touched  <a href="http://www.yahoo.com">Yahoo</a>
    => #2 modified     text text <A HREF="http://www.yahoo.com">http://www.yahoo.com</A> text
    

    我想问你,你觉得应该有什么不同?

    当做

        2
  •  1
  •   Artefacto    15 年前

    " 在URL之前,因此后面的负数使其不匹配。

    无论如何,要可靠地做到这一点,您应该使用HTML解析器。您可以只转换文本节点,而不必担心现有的HTML元素。

    推荐文章