fog
Рыцарь Джедай
Заменить в строке символы \n на BR исключая находящиеся в блоках NOBR
Вопрос к знатокам регулярных выражений
Помогите написать рег. выражение, которое в тексте заменит переносы строк на BR, кроме случаев когда перенос находится внутри блока текста, ограниченного тегами {NOBR}{/NOBR}
Я написал такой скрипт (приведён в конце), но у меня не получилось сделать это одним выражением. И вообще, то что там большой блок текста заменяется большим блоком текста мне не очень нравится. Интересно было бы посмотреть как это делается.
Можно было бы например решить это так
1. регулярным выражением заменяются все переносы строка ВНУТРИ БЛОКОВ на какой-нибудь символ(мне кажется такое рег. выражение легче будет)
2. Все оставшиеся переносы строк заменяются на <BR>
3. Символ заменяется обратно на перенос строки.
Тогда можно использовать только один регэесп.
Ещё можно менять перенос строки внутри блока на пробел, тогда обратно можно не менять вообще (так как текст после обработки будет попадать на веб-страницу, и не важно что там было - перенос строки или пробел)
мой скриптик:
Вопрос к знатокам регулярных выражений

Помогите написать рег. выражение, которое в тексте заменит переносы строк на BR, кроме случаев когда перенос находится внутри блока текста, ограниченного тегами {NOBR}{/NOBR}
Я написал такой скрипт (приведён в конце), но у меня не получилось сделать это одним выражением. И вообще, то что там большой блок текста заменяется большим блоком текста мне не очень нравится. Интересно было бы посмотреть как это делается.
Можно было бы например решить это так
1. регулярным выражением заменяются все переносы строка ВНУТРИ БЛОКОВ на какой-нибудь символ(мне кажется такое рег. выражение легче будет)
2. Все оставшиеся переносы строк заменяются на <BR>
3. Символ заменяется обратно на перенос строки.
Тогда можно использовать только один регэесп.
Ещё можно менять перенос строки внутри блока на пробел, тогда обратно можно не менять вообще (так как текст после обработки будет попадать на веб-страницу, и не важно что там было - перенос строки или пробел)
мой скриптик:
PHP:
preg_match_all("/{NOBR}.*?{\/NOBR}/s", $str, $matches);
for($i=0; $i<count($matches); $i++)
{
$str_part = str_replace("\n", "¬", $matches[$i]);
$str = str_replace($matches[$i], $str_part, $str);
unset($str_part);
}
$str = str_replace("\n", "<br>", $str);
$str = str_replace("¬", "\n", $str);
$str = str_replace(array('{NOBR}','{/NOBR}'), '', $str);
echo $str;