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