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

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

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

#1楼 票数: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);

#2楼 票数:1

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

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

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

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

#3楼 票数:0

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

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

你也忘了逃避关闭]

解:

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

#4楼 票数: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);

  ask by user1677709 translate from so

未解决问题?本站智能推荐:

2回复

preg_replace中的preg_replace

现在,我遇到了替换preg_match已经出现的字符串的问题。 可以说,我有BB代码[b]bla[/b]我有这部分与更换工作[b]与<b>还是让我们只说对他们做了所有测试目的[b]hi [b]test[/b][/b] ,最终结果是“ hi [b]test[/b] ”,所有内容均以粗
2回复

了解preg_replace函数的工作方式

我看到了类似的代码 输出类似于foo 2000 。 我很困惑,因为我知道[0-9] +检查范围在一个或多个内的数字。 它不应该像200020002000那样产生o / p吗?
1回复

preg_replace条件

我正在使用 preg_replace 在图像下方添加文本。 我的正则表达式看起来像: 当 img 标签单独时,它按预期工作 但是,当图像包含在链接中时,文本也会被包裹在链接中: 有问题的图片哪种方法是防止这种行为的最佳方法?
3回复

preg_replace错误

我有一个需要替换的实体数组,但是只有每个实体的第一次出现(这就是为什么我使用preg_replace而不是str_replace )的原因,例如: 我收到以下错误: 逃脱括号并逃脱正则表达式中可能使用的任何其他字符的最佳方法是什么? 谢谢
2回复

preg_replace疑问

我做错了什么? 输出如下: 123.456.789-01 。 不格式化字符串!!
1回复

关于使用preg_replace()

为了进行测试,这是我在正则表达式上使用的代码: 现在,所打印的只是该字符串,就好像没有进行任何更改一样。 有什么想法吗?
5回复

preg_replace和日期

我想删除日期字符串中的所有-和/字符。 有人可以帮我吗? 这是我所拥有的,但不起作用。 另外,有没有办法将这两个表达式组合在一起,所以我不必有2个preg_replaces?
1回复

帮助preg_replace

我正在尝试转换URL,但是如果它们在src =“之后出现,则不可以。到目前为止,我已经有了这个... 它将转换URL,即使它在src =“之前