Помощь в regular expression

mastrelelik

Новичок
Просьба помочь написать регулярку, которая вырезает все пустые строки находящиеся в фигурных скобках.
Есть строка:
11111

2222{
333333


44444

55555}
И надо, чтоб получилось
11111

2222{333333
44444
55555}
 

mastrelelik

Новичок
Пробовал вот так.
$str=preg_replace("/\{(\w+)\n{2,}\b\}/", "\\1\n", $str);
Если без фигурных скобок, то работает.
 

AnrDaemon

Продвинутый новичок
\n{2,}\b\} - бессмысленная комбинация. Потому и не работает.
 

mastrelelik

Новичок
Напиши по-русски, что делает этот фрагмент.
Если на время удалить фигурные скобки, то находит "пары" {множество буквенно-цифровых символов, две и более пустые строки}.
Ключ \b я пробовал применить, чтоб находило строго по парам. И соответсвенно в каждой паре затем заменить пустые строки одним переносом (\n).
 

AnrDaemon

Продвинутый новичок
Я не просил философствовать, я просил написать на русском языке расшифровку указанного фрагмента регулярного выражения.
 

AnrDaemon

Продвинутый новичок
Раз я переспрашиваю, очевидно, что не объяснил.
Попытайся ещё раз.
 

mastrelelik

Новичок
Раз я переспрашиваю, очевидно, что не объяснил.
Попытайся ещё раз.
Эта регулярка не работает, и если задача не решаема, то так и скажи. Я всего лишь попросил помощь не более. Если хочешь поболтать, то давай это делать в личке.
 

AnrDaemon

Продвинутый новичок
Нет, дорогой, ты сейчас не помощи просишь, ты просишь сделать работу за тебя.
 

AnrDaemon

Продвинутый новичок
Т.е. ты от фонаря вставлял различные модификаторы в надежде что один из них случайно даст нужный эффект, без малейшего понимания их смысла?
 

stalxed

Новичок
mastrelelik, просто не пытайтесь всё сделать 1 регуляркой:

PHP:
$text = preg_replace_callback(
    '/\{([^\}]+)\}/',
    function ($matches) {
        $temp = $matches[1];
        $temp = trim($temp);
        $temp = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $temp);  
        return '{' . $temp . '}';
    },
    $text
);
Код удаления повторных строк отсюда: http://stackoverflow.com/a/709684/3341795
 
Сверху