Прости меня за то, что я не лучше в регулярных выражениях.
Извинения: пример обновлен
Я убираю мусор на форуме phpBB с помощью скрипта PHP. phpBB кодирует bbcode с каким-то ключом, 8-значной строкой, которая появляется после двоеточия. Вот пример:
outer [size=5:24f81ld3]inner text[/size:24f81ld3] outer
Я пытаюсь разделить, где размер один символ, а не два, поэтому выше будет:
outer inner text outer
Но это:
outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer
Было бы НЕ стать этим:
outer inner text outer
Цени любую помощь!
Вот код
function remove_phpbb_garbage($str)
{
return preg_replace('/\[size=[0-9a-z](?::[0-9a-z]+)?\]((?:[^\[]|\[(?!\/size))*)\[\/size(?::[0-9a-z]+)?\]/i', '\1', $str);
}
Вот тестовые сценарии использования:
echo remove_phpbb_garbage("outer [size=1]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=5:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=5:24f81ld3]inner text[/size:24f81ld3] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer"), "\n";
echo remove_phpbb_garbage("[b:2q9o3yfx][size=2:2q9o3yfx][font=Arial:2q9o3yfx]Please be careful on how to Jail break your Iphone. In case if you are not already did it. There is a lot of specific instructions How to Jail break your phone on the web. Please read up before attempting a Jail break.[/font:2q9o3yfx][/size:2q9o3yfx][/b:2q9o3yfx] _________________ [bg2ads1:2q9o3yfx][/bg2ads1:2q9o3yfx]"), "\n";
Вот вывод:
outer inner text outer
outer inner text outer
outer [size=100:24f81ld3]inner text[/size] outer
outer [size=100:24f81ld3]inner text[/size] outer
outer inner text outer
outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer
[b:2q9o3yfx][font=Arial:2q9o3yfx]Please be careful on how to Jail break your Iphone. In case if you are not already did it. There is a lot of specific instructions How to Jail break your phone on the web. Please read up before attempting a Jail break.[/font:2q9o3yfx][/b:2q9o3yfx] _________________ [bg2ads1:2q9o3yfx][/bg2ads1:2q9o3yfx]
Важная заметка: Функция делает не обрабатывать вложенные size
теги правильно!
Если вы заинтересованы в регулярных выражениях, этот замечательный ресурс охватывает их во всех деталях и вариантах:
http://www.regular-expressions.info/
Приведенное ниже регулярное выражение будет соответствовать тегу размера, только если его значение будет ровно одним символом.
Regex:
\[(size)=[^:]:([^\]\[]*)\]([^\[\]]*)\[\/\1:\2]
Строка замены:
$3
Код будет,
preg_replace('~\[(size)=[^:]:([^\]\[]*)\]([^\[\]]*)\[\/\1:\2]~', '$3', $str);