删除空白子弹点(BBCode)

时间:2014-01-28 17:30:12

标签: php regex bbcode

好的,所以我试图想出一个PHP方法,删除我正在做的空白项目符号列表。

这是我的一个例子:

http://rubular.com/r/01ydqcWx3Q

但我似乎无法得到它只抓住空白的[*]所以我可以删除它们...... 这是抓住非空白的..所以我可以把它放在下面的$ matches变量中:

preg_match('/\[\*\][A-z0-9 ]+/', $body, $matches);

但是..我希望$ matches由空白组成,所以我可以删除它们..或者如果除了[list]之外还有一种方法可以获取除了匹配之外的所有内容..

正如你所看到的那样,它正在抓住[/ list]中的[也不是我想要的东西]。 其中一些只有两个空白,三个空白,一个空白或......更多......

任何帮助都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

使用它来捕获仅包含[*]的字符串:

^\[\*\]$

然后说明:

preg_replace('/^\[\*\]$/', '', $body);

答案 1 :(得分:0)

如果您想将[*]与正则表达式匹配,则必须使用反斜杠转义所有三个字符,因为它们是meta-characters。接下来,您必须确定[*]后面是否紧跟换行符(\n\r\n)或列表末尾([/list])。然后用空字符串替换它。

$body = "[list][*]Hydrogen
[*]
[*]Helium
[*]Lithium
[*]
[*]
[*]Beryllium
[*]Boron
[*]Carbon
[*]Nitrogen
[*]
[*]Oxygen
[*][/list]";
$body = preg_replace("/\[\*\](?:\r?\n|(?=\[\/list\]))/", "", $body);
print($body);

输出将是:

[list][*]Hydrogen
[*]Helium
[*]Lithium
[*]Beryllium
[*]Boron
[*]Carbon
[*]Nitrogen
[*]Oxygen
[/list]