繁体   English   中英

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

[英]PHP: process all regex matches

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

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

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

    [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小时的思考之后停止工作,因为我甚至不知道从哪里开始。

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

您需要将preg_replace与一些正则表达式组一起使用

$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);

同样重要的是要逃避像[ ] \\等正则表达式使用的一些字符。

工作小提琴

根据史蒂夫的评论,我建议使用Markdown。

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

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

示例测试:

$inputString = '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].';

$expectedOutputString = 'This is a page description that will contain multiple link markups such
    as <a href="http://url.com">this</a> and <a href="http://url.com">this too</a>.';

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

if ($expectedOutputString === $actualOutputString) {
    echo 'CORRECT';
} else {
    echo 'INCORRECT';
    echo $expectedOutputString . ' !== ' . $actualOutputString;
}

// OUTPUT: CORRECT

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

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

并替换为

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

演示和解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM