2014-01-28 1 views
1

Хорошо, поэтому я пытаюсь придумать метод PHP, который удаляет пустые списки маркеров, которые я делаю.Удалить пустые пункты (BBCode)

Вот пример у меня есть:

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

Но я не могу получить его только захватить [*], которые являются пустой, так что я могу удалить их ... Это захватывая непустые из них .. так что я мог бы поставить его в $ совпадает с переменной ниже:

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

Но .. Я хочу $ матчи состоят из пустых из них, так что я могу просто удалить их .. или если есть способ захватить все, кроме совпадений для удаления, кроме fo r [список].

Как вы можете видеть, он захватывает [в [/ list], который не то, что я хочу. Некоторые из них будут иметь только две пустые, три пустые, одну заготовку или ... более ...

Любая помощь будет принята с благодарностью.

Спасибо!

ответ

0

Если вы хотите, чтобы соответствовать [*] с регулярным выражением, вы должны избежать всех три символа с обратной косой чертой, потому что они meta-characters. Затем вам нужно выяснить, следует ли сразу после [*] использовать новую строку (или \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] 
0

Используйте это, чтобы поймать строки, содержащие точно только [*]:

^\[\*\]$ 

Инструкция тогда:

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

 Смежные вопросы

  • Нет связанных вопросов^_^