Помогите с Regex'ом

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

Статус темы:
Закрыта.
Модераторы: xpert13
  1. mazai007

    mazai007 Создатель

    Регистр.:
    30 ноя 2007
    Сообщения:
    46
    Симпатии:
    15
    Необходимо находить версии
    1.0 или 1.2.1 или 1.3.4.1 тоесть всегда имеется
    число.точка.число может быть и так 1.12 или 1.43
    сейцчас делаю так
    Код:
    #[0-9.]{3,9}#i
    но это не подходит.... если в тексте имеется год....

    подскажите как реализовать
     
  2. Ad1ce

    Ad1ce Постоялец

    Регистр.:
    18 авг 2009
    Сообщения:
    109
    Симпатии:
    25
    Если точка обязательно присутствует, то наверно можно сделать как то так:
    ([0-9]+.[0-9]+)
     
  3. petr24st

    petr24st Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    29
    Симпатии:
    5
    не получится сделать такую регулярку, т.к. формат даты четко подходит под этот шаблон, тут либо отказываться от подмножества дат, либо забить на них (если вероятность наличия дат в исходном тексте ничтожно мала)
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    а исходный текст посмотреть можно?
     
  5. mazai007

    mazai007 Создатель

    Регистр.:
    30 ноя 2007
    Сообщения:
    46
    Симпатии:
    15
    Ad1ce твоя регулярка точно не подходит сразу вижу
    Исходный текст разный, просто подставь например Lalalalal 2010 lal 2.1.3 lalala так примерно

    В тексте года встречаются от 2008 до 2010 может их можно от фильтровать?
     
  6. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    Код:
    ([0-9]{1,3}\.[0-9]{1,3})
    а дальше с разрядностью поиграйся. и на будущее желательно исходник для парсинга давать, не все обладают телепатией
     
  7. petr24st

    petr24st Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    29
    Симпатии:
    5
    т.е. в тексте встречаются только года вида 2008 или же еще имеются даты вида 12.12.2008?
     
  8. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    Код:
    #\d\.\d{1,2}\.?\d?\.?\d?#
    если в тексте есть даты dd.mm.yyyy, можно ограничить пробелами

    PHP:
    $str =  "Lalalalal 2010 1.0 или 1.2.1 или 12.12.2008 1.3.4.1 lal 2.1.3  1999 2.1 lalala";
    preg_match_all('#\s(\d\.\d{1,2}\.?\d?\.?\d?)\s#',$str,$res);
    print_r ($res[1]);
     
    mazai007 нравится это.
  9. petr24st

    petr24st Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    29
    Симпатии:
    5
    Вы не учли что формат версии может совпасть с форматом даты
     
  10. katrukhin

    katrukhin

    Регистр.:
    6 июн 2010
    Сообщения:
    168
    Симпатии:
    22
    Так что теперь, вроде проблемы я не вижу
     
Статус темы:
Закрыта.