让我了解preg_replace

时间:2012-09-17 13:35:39

标签: php regex preg-replace

我一直在互联网上寻找一些有用的信息,我想我发现了太多。我试图理解正则表达式,但是没有得到它。

比如说$data="A bunch of text [link=123] another bunch of text.",它应该被"< a href=\"123.html\">123< /a>"取代。

我一直在尝试使用与此类似的代码:

$find = "/[link=[([0-9])]/";
$replace = "< a href=\"$1\">$1< /a>";
echo preg_replace ($find, $replace, $data);

但输出始终与原始$ data相同。

我想我必须看到与我的问题相关的东西才能理解基础知识。

4 个答案:

答案 0 :(得分:3)

删除[]周围的额外(),并在+之后添加[0-9]来量化它。另外,逃避构成标签本身的[]

$find = "/\[link=(\d+)\]/"; // "\d" is equivalent to "[0-9]"
$replace = "<a href=\"$1.html\">$1</a>";
echo preg_replace($find,$replace,$data);

答案 1 :(得分:1)

正则表达式将是 \ [link =([\ d] +)\]

您可以在http://www.regular-expressions.info/

找到快速概述正则表达式的良好来源

当你真正对正则表达的力量感兴趣时,你应该买这本书:Mastering Regular Expressions

在Windows客户端上测试RexEx的好程序是:RegEx-Trainer

答案 2 :(得分:0)

您缺少+量词,因此如果link=后面有一位数,您的模式会匹配。

还有一对[..],因此外部[...]将被视为字符类。

你也忘记了结束]

解决方案:

$find = "/[link=([0-9]+)\]/";

答案 3 :(得分:0)

<?php
$data= "A bunch of text [link=123] another bunch of text.";
$find = '/\[link=([0-9]+?)\]/';
echo preg_replace($find, "<a href=\"$1\">$1</a>", $data);