我一直在互联网上寻找一些有用的信息,我想我发现了太多。我试图理解正则表达式,但是没有得到它。
比如说$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相同。
我想我必须看到与我的问题相关的东西才能理解基础知识。
答案 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);