首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >让我了解preg_replace

让我了解preg_replace
EN

Stack Overflow用户
提问于 2012-09-17 21:35:39
回答 4查看 416关注 0票数 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相同。

我认为我必须看到一些与我的问题相关的东西,了解基础知识。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-17 21:37:51

删除()周围的额外[],并在[0-9]后面添加+以对其进行量化。另外,对组成标记本身的[]进行转义。

代码语言:javascript
运行
复制
$find = "/\[link=(\d+)\]/"; // "\d" is equivalent to "[0-9]"
$replace = "<a href=\"$1.html\">$1</a>";
echo preg_replace($find,$replace,$data);
票数 3
EN

Stack Overflow用户

发布于 2012-09-17 21:48:59

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

快速了解正则表达式的一个很好的源码可以在这里找到http://www.regular-expressions.info/

如果你真的对正则表达式的强大功能感兴趣,你应该买这本书:Mastering Regular Expressions

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

票数 1
EN

Stack Overflow用户

发布于 2012-09-17 21:38:01

您缺少+限定符,因此,如果link=后面有一个数字,则您的模式将匹配。

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

您还忘记了结束]的转义。

解决方案:

代码语言:javascript
运行
复制
$find = "/[link=([0-9]+)\]/";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12460400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档