【问题标题】:Links and Images Embedding Regexes嵌入正则表达式的链接和图像
【发布时间】:2013-11-04 11:10:53
【问题描述】:

社区!

我是正则表达式的新手,但遇到了麻烦。 我有一个简单的用户数据解析器的聊天脚本。 可以嵌入带有 BBCode 标签的图像,如下所示:[img]http://example.com/image.png[/img]。 我还想对有效的超链接进行自动链接转换。 我有两个处理正则表达式,不知道如何解决它们之间的冲突。

为了处理[img]标签,我使用它,它首先执行:

$line = preg_replace('/\[img\](https?:\/\/[a-zA-Z0-9%\-_?&=:+.\/]+)\[\/img\]/iU', '<a href="$1" target="_blank"><img class="incl_img" src="$1"></a>', $line, 5);

然后我用这个来处理链接:

$line = preg_replace('#(https?:\/\/([a-zA-Z0-9-.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e', '\'[<a href="$1" title="$1" target="_blank">$2</a>]\'',$line);

当用户发布图像时,链接处理正则表达式会通过插入其&lt;a href=... 而不是链接来破坏&lt;img&gt; 标签。如何在不使用特殊 [url] 标签或其他东西的情况下避免它?如何将[img]标签与简单链接分开?欢迎对正则表达式和/或算法进行任何更正。提前致谢!

【问题讨论】:

    标签: php regex parsing pcre


    【解决方案1】:

    试试这个小辅助函数:

    function parseCode($txt)
    {
       // these functions will clean the code first
       $ret = strip_tags($txt);
    
       // code replacements
       $ret = preg_replace('#\[link\=(.+)\](.+)\[\/link\]#iUs', '<a href="$1">$2</a>', $ret);
       $ret = preg_replace('#\[img\](.+)\[\/img\]#iUs', '<img src="$1" alt="Image" />', $ret);
    
       // return parsed string
       return $ret;
    }
    

    用法:

    echo parseCode('[link=https://www.google.com]Click here to go to google[/link]');
    echo "<br />";
    echo parseCode('[img]https://www.google.co.uk/images/srpr/logo11w.png[/img]');
    

    【讨论】:

    • 感谢您的回复,但我说我不想使用任何BBCode标签来处理链接。在[img]标签中使用时是不是可以让它们自动高亮并忽略它们?
    【解决方案2】:

    我解决了我的问题。解决方案是更正第二个正则表达式(URL 解析器)并添加一些条件。新的正则表达式将如下所示:

    #(?<!src="|href=")(https?:\/\/([a-zA-Z0-9\-\.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e'
    

    整个代码变成了这样:

    $line = preg_replace('#(?<!src="|href=")(https?:\/\/([a-zA-Z0-9\-\.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e', '\'[<a href="$1" title="$1" target="_blank">$2</a>]\'',$line);
    

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多