На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Не учитывать совпадение при определенных условиях , пропускать совпадения с нежелательными символами
      Есть выражение для поиска номеров телефонов:
      ExpandedWrap disabled
        (\d[\d-•() ]{6,17})|(/\d{3,3}/[\d-•() ]{6,17})



      но в тексте часто встречается не только номер телефона, но и цена, или какой-нибудь номер, например, номер объявления
      Цитата
      м Голосеевская 3-7 мин., 64423457, дата: 25.05.2012


      Цитата
      тип: Монолитный, цена 154500 у.е. продам


      Нежелательные символы выделены красным
      Вопрос. Как построить выражение, которое будет пропускать такие вот совпадения, если в совпавшем тексте найден нежелательный(е) символ(ы)?
      Сообщение отредактировано: X11 -
        Если используются перлосовместимые выражения, то можно использовать утверждения (assertions).
          да, что-то в этом есть, но опять проблема

          вот выражение
          ExpandedWrap disabled
            (?<!тел\. )(\d[\d-•() ]{5,18})|(/\d{3,3}/[\d-•( ]{6,18})


          вот текст
          Цитата
          ertv rgdfs g dfsgsd тел. 7585239 ывафвыапфвапрывар

          всё-таки есть совпадение
          жирным выделил то, что выражение находит, а как бы зацепить весь номер телефона, а не только семерку
            Цитата
            как бы зацепить весь номер телефона, а не только семерку

            Например, с помощью управляющего кода \b (граница "слова"). Или указать, что предыдущий символ не должен быть цифрой.
              Не понял, что не так.
              Вот выражение
              ExpandedWrap disabled
                (?!№)\d[\d-•() ]{6,17}|(?!№)/\d{3,3}/[\d-•() ]{6,17}


              Вот текст:
              Цитата
              Смирнова-Ласточкина, . ТЛФ: +380-67-8763116, цена: 7 000 грн., (067)8763116P.S. Возможна сдачи квартиры под EURO-2012 Call., №68651705, дата: 20.06.2012


              Выражение находит все три группы цифр, в том числе и 68651705, хотя это нужно пропускать.
              что не так в этом выражении?
              Сообщение отредактировано: X11 -
                (?<!№|\d)
                  это что-то не то
                    Ой.
                      В тексте объявлений есть телефоны.
                      А также есть вот такой текст:
                      Цитата
                      решения соответствуют требованиями СНиП 31-01-2003 Здания


                      Получается так, что выделенная группа цифр определяется, как номер телефона.
                      Можно что-то придумать такое, что если перед номером есть слово: "СНиП ", то игнорировать найденный текст?
                        Цитата X11 @
                        Можно что-то придумать такое, что если перед номером есть слово: "СНиП ", то игнорировать найденный текст?

                        http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%...%BD%D0%B8%D1%8F
                        смотри про "Просмотр вперёд и назад"
                        но не все движки это поддерживают
                          Я знаю про это и у меня получается с одним символом.
                          (?<!#)(?<!\d)(?:\d|\/\d{3,3}\/)[\d-() ]{6,17}

                          т.е. если перед цифрами стоит решётка, то будет пропущено, а как вместо решётки вставить "СНиП "? Так и написать?
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0260 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:06 GMT ]