3

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

比如说$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

4 回答 4

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);
于 2012-09-17T13:37:50.563 回答
1

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

您可以在此处找到快速了解正则表达式的良好来源http://www.regular-expressions.info/

当你真正对正则表达式的力量感兴趣时,你应该买这本书:掌握正则表达式

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

于 2012-09-17T13:48:59.090 回答
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);
于 2012-09-17T13:52:43.223 回答
0

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

并且有一个额外的对,[..]因此外部[...]将被视为字符类。

你也忘记了逃跑的收场]

解决方案:

$find = "/[link=([0-9]+)\]/";
于 2012-09-17T13:38:00.680 回答