嵌入正则表达式的链接和图像

时间:2013-11-04 11:10:54

标签: php regex parsing pcre

SO社区!

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

要处理[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);

当用户发布图片时,链接处理正则表达式会通过插入<img>而不是链接来中断<a href=...标记。如何在不使用特殊[url]标记或其他内容的情况下避免使用它?如何将[img]标签与简单链接分开?任何正则表达式和/或算法的更正都是受欢迎的。提前谢谢!

2 个答案:

答案 0 :(得分:0)

尝试这个小助手功能:

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]');

答案 1 :(得分:0)

我解决了我的问题。解决方案是更正第二个正则表达式(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);