За последние 24 часа нас посетили 17594 программиста и 1312 роботов. Сейчас ищут 1006 программистов ...

Классический пример альтернативы не работает

Тема в разделе "Регулярные выражения", создана пользователем Mихалыч, 12 окт 2016.

  1. Mихалыч

    Mихалыч Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    Из примера на php.net
    PHP:
    1. if (preg_match('/жаркое|птица|/u','gbr56u'))
    2. echo "Correct";
    3. else echo "Uncorrect";
    Всегда дает Correct при любом значении строки.
    Почему так?
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вторая "или"(|) там зачем?
     
  3. Mихалыч

    Mихалыч Новичок

    С нами с:
    12 окт 2016
    Сообщения:
    4
    Симпатии:
    0
    чтобы пустая строка подходила.Так на php.net рекомендуют:
    совпадениями должны быть
    • жаркое
    • птица
    • пустая строка
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Хорошо бы понять, что в вашем случае считать "пустой строкой" и действительно ли вам она нужна. Если в строке должны быть только слова "жаркое", "птица" или "ничего" (даже пробела), то можно использовать такой вариант:
    PHP:
    1. <?php
    2. preg_match('/^\z|жаркое|птица$/u', $str);
    3.  
    4. echo preg_match('/^\z|жаркое|птица$/u',''); // 1
    5. echo preg_match('/^\z|жаркое|птица$/u',' '); // 0
    6. echo preg_match('/^\z|жаркое|птица$/u','жаркое'); // 1
    7. echo preg_match('/^\z|жаркое|птица$/u','птица-синица'); // 0