За последние 24 часа нас посетили 15653 программиста и 1556 роботов. Сейчас ищут 926 программистов ...

Регулярка(пробелы)

Тема в разделе "PHP для новичков", создана пользователем allowance, 9 фев 2011.

  1. allowance

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

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    HTML:
    1. <p class="cena">
    2.                                 Цена:
    3.                                 5 $
    4.                                
    5.                                     /
    6.                                     111(random число)
    7.                                
    8.                                
    9.                             </p>
    Как можно выцепить 5, когда столько пробелов и переводов строк?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    множители для этого существуют

    \s - пробел
    \s* - нет пробела, есть пробел, несколько пробелов
    \s+ - один или несколько пробелов.

    Это раз. Два: не нравятся пробелы - убери их =)

    ЗЫ: а регулярки я писать не умею =(
     
  3. Jampire

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

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    PHP:
    1. <?php
    2.  
    3. $str = <<<HTML
    4. <p class="cena">
    5.                                  Цена:
    6.                                  5 $
    7.                                  
    8.                                      /
    9.                                      111(random число)
    10.                                  
    11.                                  
    12.                              </p>
    13. HTML;
    14. preg_match('/Цена:\s+(\d+)\s+\$/is', $str, $matches);
    15. echo $matches[1];
    16.  
    17. ?>
     
  4. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    В этом случае вы делаете необходимым наличие пробелов. Лучше \s+ заменить на \s*. Рискну предположить, что цена еще может быть не целым значением, тогда нужно учитывать наличие точки/запятой.

    Вопрос к ТС: кто вас научил использовать знак доллара после ценника?
     
  5. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    У регулярок есть замечательный модификатор x, позволяющий игнорировать пробелы (и допускать комментарии).
    В таком случае пробелы необходимо указывать явно.
     
  6. allowance

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

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    titch
    >Рискну предположить, что цена еще может быть не целым значением, тогда нужно учитывать наличие точки/запятой.

    Да вы правы, такое может быть , как можно это учесть?
    Пробовал как то так, но не захватывает числа с точкой/запятой: 5.33
    Код (Text):
    1. preg_match('/Цена:\s+([0-9]*\.*\,?[0-9])\s+\$/is', $str, $matches);
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    \s(\d+[\.,]*\d*)\s
     
  8. allowance

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

    С нами с:
    19 янв 2010
    Сообщения:
    196
    Симпатии:
    0
    igordata
    Thanks!