PHP:处理所有正则表达式匹配

时间:2016-05-23 12:32:21

标签: php regex

在我正在处理的网站上,用户可以创建自己的网页,上传他们的作品,如音乐,艺术,图片等。

每个页面都有一个关于此页面的""用户可以放置他们需要的信息的部分。我们希望扩展它并允许它们使用自定义标记,例如链接,图像等......

现在,我一直坚持添加链接标记,我想用于标记的格式是:

    [link]http://url.com,descriptyion[/link]

并且需要将其转换为:

    <a href='http://url.com'>desciption</a>

问题是,包含标记的描述是段落格式,并且有多个链接:

    This is a page description that will contain multiple link markups such
    as [link]http://url.com,this[/link] and [link]http://url.com,this too[/link].

我知道如何使用正则表达式并捕获结果但是我从来没有必要处理更复杂的这样的事情...我的大脑只是在考虑了3小时之后就停止了工作,因为我没有甚至知道从哪里开始。

总结我的问题: 我需要从段落中找到所有正则表达式匹配,处理匹配然后将其注入到同一位置的段落。

3 个答案:

答案 0 :(得分:0)

您需要将preg_replace与一些regex

一起使用
$str = ' This is a page description that will contain multiple link markups such
as [link]http://url.com,this[/link] and [link]http://url.com,this too[/link].';

echo preg_replace('#\[link\](.*?),(.*?)\[\/link\]#', '<a href="$1">$2</a>', $str);

同样重要的是要转义正则表达式使用的一些字符,如[ ] \等。

Working fiddle

答案 1 :(得分:0)

我建议按照史蒂夫的评论使用Markdown。

如果你真的想要一个自定义链接语法,像这样的正则表达式就足够了:

app.Visible = true;

示例测试:

$outputString = preg_replace('/\[link\]([^,\[\]]+),([^,\[\]]+)\[\/link\]/i', '<a href="\\1">\\2</a>', $inputString);

答案 2 :(得分:0)

您可以使用以下正则表达式:

/(?:\[link\])(.*?),(.*?)(?:\[\/link\])/gi

并替换为

<a href='$1'>$2</a>

Demo and Explaination