我一直在互联网上寻找一些有用的信息,我想我找到的太多了。我正在尝试理解正则表达式,但是没有理解。
例如,假设是$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相同。
我认为我必须看到一些与我的问题相关的东西,了解基础知识。
发布于 2012-09-17 21:37:51
删除()周围的额外[],并在[0-9]后面添加+以对其进行量化。另外,对组成标记本身的[]进行转义。
$find = "/\[link=(\d+)\]/"; // "\d" is equivalent to "[0-9]"
$replace = "<a href=\"$1.html\">$1</a>";
echo preg_replace($find,$replace,$data);发布于 2012-09-17 21:48:59
正则表达式应该是[link=(\d+)]
快速了解正则表达式的一个很好的源码可以在这里找到http://www.regular-expressions.info/
如果你真的对正则表达式的强大功能感兴趣,你应该买这本书:Mastering Regular Expressions
在Windows客户端上测试RexEx的一个好程序是:RegEx-Trainer
发布于 2012-09-17 21:38:01
您缺少+限定符,因此,如果link=后面有一个数字,则您的模式将匹配。
并且还有一对额外的字符,因此外部[...]将被视为字符类。
您还忘记了结束]的转义。
解决方案:
$find = "/[link=([0-9]+)\]/";https://stackoverflow.com/questions/12460400
复制相似问题