За последние 24 часа нас посетили 19457 программистов и 1651 робот. Сейчас ищут 1769 программистов ...

Узнать есть ли в строке интервал (например от 2.7 до 3.1)

Тема в разделе "Регулярные выражения", создана пользователем metadon, 5 мар 2011.

  1. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Здравствуйте, не как не могу понять можно ли с помощью регулярного выражения определить что строка соотвествует скажем цифрам от 2.7 до 3.1 (то-есть интервалу)
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    $var = '2.8';
    if(number_format($var, 1) >= 2.7 && number_format($var, 1) <= 3.1)
     
  3. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    нет. при помощи обычной регулярки нельзя
     
  4. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    titch спасибо, теперь понятно почему не смог найти
     
  5. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Код (Text):
    1. #^(?:2\.[7-9]\d*|3\.(?:0\d*|10*))$#
     
  6. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Mr.M.I.T., это частный случай. регулярные выражения в общем случае не приспособлены для таких задач. если я возьму интервал от -1.2 до 32.9 изгаляться придётся самым чрезвычайным образом.
     
  7. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  8. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Регулярка может быть полезна
    PHP:
    1. <?php
    2. $text="32.9".str_repeat("0",100)."1";
    3. print preg_match("#^(?!\-(?:[2-9]+.*|1\.(?:[3-9]\d*|20*[1-9]+)))\-?(?:[0-9]|[12][0-9]|3[0-2])(?:\.[0-9](?(?<=32\.9)0*|\d*))?$#",$text);
     
  9. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Похоже найти интервал с помощью регулярных выражений возможно но очень ресурсо затратно

    Mr.M.I.T. ваш пример выводит FALSE (0) для preg_match
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно разбить строку на слова, каждое пропустить через floatval
     
  11. Mr.M.I.T.

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

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

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Похоже я не понял как ваш пример работает и что делает



    igordata а что даст разбивание строки?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, я думал, ты пытаешься вычленить интервал. Если ты просто хочешь узнать соответствует ли указанные циферки в строке нужному интервалу то

    if (floatval($str) >= $from AND floatval($str) <= $to) {

    в чем затык?
     
  14. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    хотелось бы узнать с помощью регулярного выражения что цифра относится к интервалу
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    О. Т.е. вобще без условного оператора?
     
  16. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    проверяет вхождение в [-1.2; 32.9]
    в размере float и пресижине. Хотя мож есть решение покрасивее рег? не заморачивался никогда...
     
  17. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Да только средствами регулярного выражения
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тады ой. с вакуумными конями у меня туго, а с регулярками вобще никак =)