За последние 24 часа нас посетили 52609 программистов и 1801 робот. Сейчас ищет 1601 программист ...

Регулярные выражения php

Тема в разделе "Прочие вопросы по PHP", создана пользователем Dell, 17 май 2016.

  1. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Мне необходимо вырезать из строки изменяющие данные:
    Например даётся строка:
    Код (Text):
    1.     <member id="%78465964815235614%" nick="%Dell%">
    *Значения внутри %***% изменяются (*** - изменяющие значения).
    После обработки должен выдать:
    Код (Text):
    1. f[0] = %78465964815235614%
    Код (Text):
    1. f[1] = %Dell%
    Знаю, что в Notepad++, есть регулярные выражения, которые делают это, а как делать на php не знаю, помогите!
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. preg_match('/id="([^"]+)"\s+nick="([^"]+)"/i', $str, $match);
    2. print_r($match);
     
    Dell нравится это.
  3. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это XML?
     
  4. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    А есть ли смысл использовать регулярки то? Почему не обратиться к аттрибутам?
     
    Dell нравится это.
  5. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Спасибо, большое выручил!
    Да, он предназначен для других целей, а я его генерирую, редактирую при помощи сайта.
    Я не знаю, что такое атрибуты, недавно узнал о регулярках, я новичок в этом деле.
     
  6. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Берём xml-строку
    PHP:
    1. $string = <<<XML
    2. <?xml version='1.0' standalone='yes'?>
    3. <main>
    4. <block>
    5.   <member id="%78465964815235614%" nick="%Dell%"></member>
    6. </block>
    7. <block>
    8.   <member id="%645654654645%" nick="%mr.akv%"></member>
    9. </block>
    10. </main>
    11. XML;
    Создаём объект XML
    PHP:
    1. $xmlObj = new SimpleXMLElement($string);
    И дальше работаем с ним, как хотим. Чтобы получить аттрибуты:
    PHP:
    1. echo $xmlObj->block[0]->member['id']; //выведет %78465964815235614%
    2. echo $xmlObj->block[0]->member['nick']; //выведет %Dell%
    3. echo $xmlObj->block[1]->member['id']; //выведет %645654654645%
    4. echo $xmlObj->block[1]->member['nick']; //выведет %mr.akv%
    Так что ящитаю использование регулярок здесь совсем неуместно
     
    #6 mr.akv, 17 май 2016
    Последнее редактирование: 17 май 2016
    Dell нравится это.
  7. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Спасибо, а если идёт строка
    Код (Text):
    1. <member id="%78465964815235614%" nick="%Dell%">
    2.    <name>Никифор</name>
    3. </member>
    Как name значение вывести?
     
  8. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    PHP:
    1. echo $xmlObj->block[0]->member->name
     
    Dell нравится это.
  9. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Последний вопрос это выполняется на стороне сервера или у клиента? И как обращаться? Через <script>...</script> или <?php ...?>, или как-то по другому?
     
  10. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    PHP:
    1. <?php ... ?>
    Это всё выполняет сервер
     
    Dell нравится это.
  11. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Этот код на что похож на PHP или JavaScript? В JavaScript есть echo?
     
  12. Dell

    Dell Новичок

    С нами с:
    2 май 2016
    Сообщения:
    8
    Симпатии:
    0
    Спасибо большое, выручил!
    Как говорю, я новичок, echo мне знакомо, а остальное нет, но все коды чем либо похожи друг на друга.
     
  13. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    так всегда говорят те, кто плохо знает регулярки
     
  14. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    возможно. Регулярки я не знаю, но зачем, если есть специальный инструмент для задачи?
     
  15. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    регулярки тоже инструмент. только более универсальный. непонимаю почему все их так боятся и хаят.
    иногда реально нужно откусить кусок строки и совсем нет необходимости использовать полноценный парсинг ВСЕГО файла. это же лишняя работа.
    к тому же, SimpleXml не айс на очень большом файле ибо все спарсит в память и её может тупо нехватить, или на невалидном xml...
    а парсинг регулярками или даже обычным поиском в строке чрезвычайно быстрый и ресурсонезатратный способ для простых задач. хотя и сложнее с непривычки.
     
    mr.akv нравится это.