The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите с регулярными выражениями.."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(ok) on 17-Дек-04, 13:23  (MSK)
Нужно, если символ в строке повторяется более 3 раз подряд урезать до 3 символов, то есть:

abc aaaaaaa bccccccccccd
должно стать
abc aaa bcccd

Что-то ни как не получается :(( Подскажите .....

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Помогите с регулярными выражениями.."
Сообщение от dev emailИскать по авторуВ закладки(??) on 17-Дек-04, 14:21  (MSK)
s/(.)\1{2,}/\1\1\1/g
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(ok) on 17-Дек-04, 15:05  (MSK)
>s/(.)\1{2,}/\1\1\1/g


Спасибо, вечером дома попробую.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Помогите с регулярными выражениями.."
Сообщение от SergeiZz Искать по авторуВ закладки on 17-Дек-04, 15:13  (MSK)
>Нужно, если символ в строке повторяется более 3 раз подряд урезать до
>3 символов, то есть:
>
>abc aaaaaaa bccccccccccd
>должно стать
>abc aaa bcccd
>
>Что-то ни как не получается :(( Подскажите .....
Пробел -- это символ? Если нет, тогда:
bash$ echo "abc aaaaaaa bccccccccccd" | sed -e 's/\([^ ]\)\1\{3,\}/\1\1\1/g'

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(??) on 17-Дек-04, 18:59  (MSK)
Да пробел - это тоже символ...

Попробовал вариант 's/(.)\1{2,}/\1\1\1/g':
echo "abc aaaaaaa bccccccccccd" | sed -e 's/(.)\1{2,}/\1\1\1/g'
sed: 1: "s/(.)\1{2,}/\1\1\1/g
": RE error: invalid backreference number

Второй вариант 's/\([^ ]\)\1\{3,\}/\1\1\1/g' был рабочим:
и вернул abc aaa bcccd
, но для пробелов не отработал :((

echo "abc aaaaaaa bccccc       cccccd" | sed -e 's/\([^ ]\)\1\{3,\}/\1\1\1/g'
abc aaa bccc       cccd

Как исправить ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Помогите с регулярными выражениями.."
Сообщение от SergeiZz Искать по авторуВ закладки on 17-Дек-04, 19:28  (MSK)
>Да пробел - это тоже символ...
>
>Попробовал вариант 's/(.)\1{2,}/\1\1\1/g':
>echo "abc aaaaaaa bccccccccccd" | sed -e 's/(.)\1{2,}/\1\1\1/g'
>sed: 1: "s/(.)\1{2,}/\1\1\1/g
>": RE error: invalid backreference number
Это не для sed писано, ибо в sed () нужно экранировать: \(\)

>Второй вариант 's/\([^ ]\)\1\{3,\}/\1\1\1/g' был рабочим:
>и вернул abc aaa bcccd
>, но для пробелов не отработал :((
>
>echo "abc aaaaaaa bccccc       cccccd" |
>sed -e 's/\([^ ]\)\1\{3,\}/\1\1\1/g'
>abc aaa bccc       cccd
>
>Как исправить ?
Так:
bash$ echo 'abc aaaaaaa bccccccccd         aabbbcc' | \
        sed -e 's/\(.\)\1\{3,\}/\1\1\1/g'
Ещё, у меня \{3,\}, а не \{2,\} -- это тоже зависит от того, что именно
нам нужно, и как это делает sed.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(??) on 17-Дек-04, 19:49  (MSK)
Супер, спасибо,
Теперь, если мне все это просто в перле использовать, то нужно просто экранироавние снять , так ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Помогите с регулярными выражениями.."
Сообщение от SergeiZz Искать по авторуВ закладки on 20-Дек-04, 13:58  (MSK)
>Супер, спасибо,
>Теперь, если мне все это просто в перле использовать, то нужно просто
>экранироавние снять , так ?
bash$ echo 'abc aaaaaaa bccccccccd         aabbbcc' | \
        perl -e '$_=<STDIN>; s/(.)\1{3,}/\1\1\1/g; print $_;'

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(??) on 20-Дек-04, 14:47  (MSK)
>>Супер, спасибо,
>>Теперь, если мне все это просто в перле использовать, то нужно просто
>>экранироавние снять , так ?
>bash$ echo 'abc aaaaaaa bccccccccd        
> aabbbcc' | \
>        perl -e '$_=<STDIN>; s/(.)\1{3,}/\1\1\1/g; print $_;'

Однако в PHP не заработало:
$tmp = ereg_replace("(.)\1{3,}","\\1\\1\\1",$tmp);

Странно, везде все поразному работает :(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Помогите с регулярными выражениями.."
Сообщение от SergeiZz Искать по авторуВ закладки on 21-Дек-04, 17:18  (MSK)
>>bash$ echo 'abc aaaaaaa bccccccccd        
>> aabbbcc' | \
>>        perl -e '$_=<STDIN>; s/(.)\1{3,}/\1\1\1/g; print $_;'
>
>Однако в PHP не заработало:
>$tmp = ereg_replace("(.)\1{3,}","\\1\\1\\1",$tmp);
>
bash$ echo '<?php $str= "abc aaaaa          ddbbbbbbbbcc";' \
        '$nstr= preg_replace("/(.)\\1{3,}/", "\\1\\1\\1", $str);' \
        'print("$nstr\n"); ?>' | php
bash$ echo '<?php $str= "abc aaaaa          ddbbbbbbbbcc";' \
        '$nstr= ereg_replace("((.)\\2{3,})", "\\2\\2\\2", $str);' \
        'print("$nstr\n"); ?>' | php

>Странно, везде все поразному работает :(
Утюг и сковородка тоже работают по-разному.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(??) on 21-Дек-04, 18:40  (MSK)
Огромное спасибо. Я удивляюсь Вашим знаниям нюансов регулярных выражений. У меня есть небольшой мануал, который я до запятой знаю, но работая с регулярными выраженими постоянно встречаешь что-то новое..

> ereg_replace("((.)\\2{3,})", "\\2\\2\\2", $str);'

Почему, например, здесь Вы использовали \\2, а не \\1 ?? Читая мануал php по функции ereg_replace не скажешь, что так надо делать :(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Помогите с регулярными выражениями.."
Сообщение от SergeiZz Искать по авторуВ закладки on 21-Дек-04, 19:13  (MSK)
>Я удивляюсь Вашим знаниям нюансов регулярных выражений.
...И опыт, сын ошибок трудных,...

>У меня есть
>небольшой мануал, который я до запятой знаю, но работая с регулярными
>выраженими постоянно встречаешь что-то новое..
Вопрос "почему так происходит?" очень близок вопросу "что такое образование,
и зачем оно нужно?".

>> ereg_replace("((.)\\2{3,})", "\\2\\2\\2", $str);'
>
>Почему, например, здесь Вы использовали \\2, а не \\1 ?? Читая мануал
>php по функции ereg_replace не скажешь, что так надо делать :(
Скажешь.
\2 обозначает последнее () выражение, здесь оно второе, потому что первое --
это весь искомый образец. В Perl формулировка та же -- \1 первое ()
выражение; только весь образец в скобки заключать не обязательно.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Помогите с регулярными выражениями.."
Сообщение от kD emailИскать по авторуВ закладки(??) on 21-Дек-04, 19:23  (MSK)
Спасибо, будем изучать далее:))

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру