За последние 24 часа нас посетили 18839 программистов и 1630 роботов. Сейчас ищут 912 программистов ...

Первый опыт

Тема в разделе "Регулярные выражения", создана пользователем ShamahN, 21 июн 2010.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Я оочень "крут" в регулярках) решил начать разбираться
    Нужно вырезать в строке упоминание об "области" ) причем, оно может быть с точкой, запятой (если она есть, ее надо оставить) ну и собственно как в начале так и где угодно вообще
    Мой великий гений родил вот такой патерн:
    Код (Text):
    1. #\Wобл\W#
    По-моему чего-то не хватает) по крайней мере, сохранить запятые не получается =)
     
  2. Вобла. :)

    Код (Text):
    1. ~обл([.]+)~i
     
  3. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    флоппик
    у меня смешнее было=)
    а если какой-нить "кадобл" будет ) Вы мне обрежете пол-слова)
    а
    Код (Text):
    1. [.]+
    классный замут) чет не допер)
    не.. и куски типа "затрапезная обл," не обрабатываются
     
  4. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Зачем там квадратные скобки?
     
  5. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    что бы не ставить \ перед точкой. Но я и сам в регулярках несилен.

    На работе нашел в пятницу кусок: `split('/[,]/', $this->getRequest()->getParam('foo'))`. Создал тикет, дескать что ж вы творите-то, сволочи?). И что вы думаете? Позаменяли split на preg_split и все! Клоуны блин.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Эстооооонцы
     
  7. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    та не, я в середине апреля ушел от эстонцев. Это свои, днепропетровские
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Код (Text):
    1. #(?:(?<=[^\w])|^)обл(?:(?=[^\w])|$)#i
     
  9. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Mr.M.I.T.
    наверное, все отлично =) я в вас нисколько не сомневаюсь... Вот только, mАтb 3r0, utf-8
    Код (Text):
    1. Unknown modifier '�'
    Код (Text):
    1. mb_internal_encoding("UTF-8");
    2. mb_regex_encoding('UTF-8');
    что еще можно придумать? конвертить в 1251 или латин?
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    что в утф? паттерн? читай про модификатор u
    если с ним такие проблемы, может его вообще не использовать?
     
  11. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Mr.M.I.T.
    ставил и убирал модификатор. ничего не меняется
    не вариант весь проект переделывать. Проще одну костылину воткнуть, - дождаться 6го пхп
    Вот только что придумать
    Код (Text):
    1. var_dump(preg_replace("(?:(?<=[^\w])|^)обл(?:(?=[^\w])|$)u", "", "обл Волгодонская обл., областной, обл, кадобл.,"));
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а теперь ясно. читай про ограничители
    Код (Text):
    1. var_dump(preg_replace("#(?:(?<=[^\w])|^)обл(?:(?=[^\w])|$)#iu", "", "обл Волгодонская обл., областной, обл, кадобл.,"));
     
  13. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Прогнался )
    Но
    Немного не то) Областной и кадобл он должен был оставить)
    \w и \W как-то не сильно работают (если не латиница).. надо что-то придумать
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    он и оставляет. локаль поставь.
    или убери этот утф нафиг
     
  15. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Код (Text):
    1. setlocale(LC_ALL, 'ru_RU.UTF8');
    2.  
    3. mb_internal_encoding("UTF-8");
    4. mb_regex_encoding('UTF-8');
    осталось только найти как определить любой символ образующий слово в utf-8 и заменить им \w =)
     
  16. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Код (Text):
    1. [^a-z\x80-\xFF]+
    вот такое что-то =) куда можно воткнуть?
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Код (Text):
    1. var_dump(preg_replace("#(?:(?<=[^\w])|^)обл(?:(?=[^\w])|$)#i", "", "обл Волгодонская обл., областной, обл, кадобл.,"));
    Код (Text):
    1. var_dump(preg_replace("#(?:(?<=[^a-z0-9а-я_])|^)обл(?:(?=[^a-z0-9а-я_])|$)#iu", "", "обл Волгодонская обл., областной, обл, кадобл.,"));
     
  18. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    дважды финт ушами по перекодировке туда/сюда и все работает
    Mr.M.I.T., спасибо за патерн, низкий поклон =)
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    проблема не в перекодировании, а в модификаторе u + \w
    выше 2 работающих варианта
     
  20. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Mr.M.I.T.
    Да. Работает. Не понятно, почему u+ \w не работают. Если убрать модификатор u то все отлично... чудеса какие-то
    Код (Text):
    1. 'обл Волгодонская обл., областной, обл, кадобл, =>  Волгодонская ., областной, , кадобл,'
    и если "обл." то "." надо тоже убрать =)
     
  21. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
     
  22. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Mr.M.I.T., запятую оставить, а точку убрать =)
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
     
  24. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Mr.M.I.T., спасибо еще раз
    мде.. это если у меня существует куча кучная адресных сокращений для каждого адреса это мне надо их все вместо "обл" втыкнуть
     
  25. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    в регах есть "или"