regexp нужна помощь

  • Автор темы Автор темы berkut
  • Дата начала Дата начала

berkut

Новичок
regexp нужна помощь

помогите написать регулярное выражение, для вырезания лишних переводов строки.
Между не пустыми строками(строками содержащими \r\n или пробельные символы) должно быть не более 1 пустой строки. Например:
Код:
1 line¶
¶
¶••
4th line
где • - это пробел или таб, а ¶ - перевод строки
нужно получить
Код:
1 line¶
¶
3rd line
что-то соорудил, но ЭТО не хочет работать
PHP:
$c = preg_replace('#^ *$#', '', $c);
echo preg_replace("#(\r?\n)+#s", "\r\n", $c);
 
preg_replace("/(\r\n)\s*(\r\n)/", "\r\n\r\n", $str);

смысл: если есть 2 перевода строк (win), между которыми есть любые спэйсеры, то эти спэйсеры убираем, и оставляем только эти 2 перевода строк.
 
Wicked спасибо, единственный рабочий вариант

-~{}~ 26.07.06 11:06:

Wicked можешь объяснить, получается в твоём варианте \s* съедает ещё и лишние \r\n?
 
этот вопрос надо задавать не Wicked, а документации.
 
Фанат
Еще скажи, что он не работает... да временами, может работать не на тех участках, на которых нужно. Но если у автора вопроса, нет больше двух пробельных символов в тексте, а есть только в конце строк, то все будет ок.
 
avenger_msoft
заменять два пробела на два перевода строки - это да, именно то, что человек спрашивал, ага.
ума, блин, палата
 
Фанат
У него в вопросе не сказано, что в тексте так же может встречатся 2-а пробельных символа.
Каков вопрос, таков и ответ.
 
ну ты тупоооой.
у него сказано, что вырезать надо лишние переводы строки.
а не лишние табуляции.
 
avenger_msoft
Ты вопросы читаешь? Или ты самый "умный"?
"содержащими \r\n или пробельные символы"
 
Автор оригинала: Фанат
ну ты тупоооой.
у него сказано, что вырезать надо лишние переводы строки.
а не лишние табуляции.
Автор оригинала: berkut
где • - это пробел или таб, а ¶ - перевод строки
Попрошу без оскарблений, сам такой пародистый.
 
по идее, вариант для всех типов перевода строк
PHP:
preg_replace("/(\r\n|\n|\r)\s*(\r\n|\n|\r)/", "\\1\\1", $c);
 
Автор оригинала: sakon
avenger_msoft
Ты вопросы читаешь? Или ты самый "умный"?
"содержащими \r\n или пробельные символы"
Когда я говорю, что в тексте не может встречатся 2-а пробельных символа, я имею в виду такую ситуацию:

1 нормализированная строка. \r\n\s\t
\r\n\s\t
2 нормализированная строка. \r\n\s\t
\r\n\s\t
3 нормализированная строка. \r\n\s\t
4 нормализированная строка. \r\n\s\t

Нормализированная строка - это строка, в который между словами нет символов перевода строки, между словами не более 1-го пробела и знака табуляции.

В этом случае мое регулярное выражение будет работать.
Я исходил из того, что у автора вопроса нормализированные строки.
 
avenger_msoft
а еще можно предъявить требование, что в строке вообще не должно быть проблелов, и тогда можно заменять даже не \s{2, } а просто \s+. И будет вообще красота.
 
Сверху