За последние 24 часа нас посетили 72617 программистов и 3032 робота. Сейчас ищут 1470 программистов ...

Регулярное выражение не работает

Тема в разделе "PHP для новичков", создана пользователем Dron-Boy, 24 май 2017.

  1. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Начал изучать регулярки так как пришлось написать выбор строки из кода
    ну например у меня есть строка
    HTML:
    1. <title>Цвета белый, черный</title>
    вместо <title> может стоять что угодно внутири тегов обязательно должно присудствовать слово Цвет
    но оно так же может быть либо Цвет либо цвет либо Цвета или цвета
    ну написал вот такое выражение
    PHP:
    1. preg_match('|<*[^>]*?>((Ц\|ц)вет(\s\|а)\s+(*))<*>|sei', $slovo, $arr);
    Проверку на любые теги проходит но вот со серединой
    PHP:
    1. ((Ц\|ц)вет(\s\|а)\s+(*))
    проблемы что написал нетак?
     
  2. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а так?
    Код (Text):
    1. (Ц|ц)вет[.]{0,1}
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Начал изучать регулярки, чтоб ваять парсеры? :)))
     
  4. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Вот так если все выражение
    Код (Text):
    1. <.*>([Ц|ц]вет[а]?.*)<\/.*>
     
  5. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    PHP:
    1. preg_match('|<*[^>]*?>((Ц|ц)вет[.]{0,1})<*>|sei', $slovo, $arr);
    Вот вставил твой код не работает
    --- Добавлено ---
    PHP:
    1. preg_match('|<*[^>]*?>(<.*>([Ц|ц]вет[а]?.*)<\/.*>)<*>|sei', $slovo, $arr);
    так тоже не хочет
    --- Добавлено ---
    да мне нужно распарсить целую таблицу с атрибутами. а там куча всего известно только название каждого атрибута(
     
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. <?php
    2. preg_match('/<([A-Z][A-Z0-9]*)[^>]*>(цвет[а]?)\s(.*?),\s(.*?)<\/\1>/iu', '<title>Цвета белый, черный</title>', $matches);
    3. print_r($matches);
    Код (Text):
    1. Совпадения будут на:
    2. <title>Цвета белый, черный</title>
    3. <title>цвета белый, черный</title>
    4. <title>Цвет белый, черный</title>
    5. <title>цвет белый, черный</title>
    6. Array
    7. (
    8.     [0] => <title>цвет белый, черный</title>
    9.     [1] => title
    10.     [2] => цвет
    11.     [3] => белый
    12.     [4] => черный
    13. )
     
  7. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    да спасибо вроде работает