[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. WebGer

    WebGer New Member

    Joined:
    30 Nov 2008
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Code:
    /<\?.*\?>/s
    Работает неправильно.
    Надо, чтобы из текста вида
    Code:
    <?
    TEST
    ?>
    NO
    <?
    TEST2
    ?>
    он выбирал
    Code:
    <?
    TEST
    ?>
    и
    <?
    TEST
    ?>
    А он выбирает ВЕСЬ текст, вместе со словом NO.
    Хелп.
     
  2. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Используй символ жадности:
    Code:
    /<\?(.*?)\?>/s
     
  3. suser

    suser Member

    Joined:
    30 Dec 2009
    Messages:
    35
    Likes Received:
    5
    Reputations:
    0
    PHP:
    preg_match_all("#<\?[^<>]*\?>#is"$text$mas);
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    suser Входной текст:
    Code:
    <? echo '<hr />'; ?>
    И ваша регулярка не найдет ничего
     
    _________________________
  5. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    '#<input[^>]*? name="(.*)"#'
    '#<img[^>]*? scr="(.*)"#'
     
  6. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    |<input.+?name="(.+?)".*?>|i
    |<img.+?src="(.+?)".*?>|i
    
     
  7. Alpha][

    Alpha][ Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    75
    Likes Received:
    5
    Reputations:
    0
    Есть html код
    PHP:

    <li><div class="structHeader"><a href="javascript://" id="plus" onclick="if($(this).html()=='++++') $(this).html('----'); else $(this).html('++++'); toggle('struct1771203'); " >++++</aРегион</div><ul class="struct" id="struct1771203" style="display:none;"><li><a href="/novator/joomla/index.php?option=com_comprofiler&amp;view=userProfile&amp;user=141">Клюкин Александр Владимирович</a> - Продавец консультант</li></ul></li></ul></li><li>

    Помогите пожалуйста написать регулярку что бы отсечь все незакрытые теги не тронув при этом закрытые .
     
  8. dimash

    dimash Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    78
    Likes Received:
    2
    Reputations:
    0
    Доброго,
    Помогите вспомнить основы.
    Регулярные выражения я разберу, есть откуда почитать. Суть в другом, в самом принципе работы.

    Например, когда мы преобразовываем ссылку
    HTML:
    www.yoursite.com/script.php?product=123 
    к виду
    HTML:
     www.yoursite.com/cat/product/123/ 

    мы используем выражение
    PHP:
    RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$


    Правильно ли понимаю, что изначально мы смотрим и пишем /script.php?$1=$2, то есть вторую часть, изначальную свою ссылку. Затем мы прописываем первую часть cat/(.*)/(.*)/$ и каждая переменная (в нашем случае $1, $2) (последовательно, слева направо?) идет прописываться в каждую круглую скобку? Вот, и какую роль тогда здесь играют регулярные выражения?
     
  9. dimash

    dimash Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    78
    Likes Received:
    2
    Reputations:
    0
    Благодарю за ответ. Странно вообще-то получается. Я хочу site.com/cat.php?A1=B1&params=777 с помощью RewriteRule переименовать в site.com/catalog/firma/obelisk/index.html (просто как пример), а вы говорите что RewriteRule делает абсолютно противоположную задачу. Верно? Как достигнуть моей цели?
     
  10. dimash

    dimash Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    78
    Likes Received:
    2
    Reputations:
    0
    Я понял задом-наперед. Хорошо.
    Как мне можно добиться такого результата
    Сейчас ссылка index.php?action=company&lang=ru
    Мне надо /ru/company.html
     
  11. dimash

    dimash Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    78
    Likes Received:
    2
    Reputations:
    0
    [a-zA-Z]+ можно [a-Z]+
    А почему первое выражение было [a-zA-Z], а второе (.*)
     
  12. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    У меня есть куча select'ов:
    HTML:
    <select id='w1'>
    option value='1' >1</option>
    option value='2' >2</option>
    option value='3' >3</option>
    </select>
    
    <select id='w2'>
    option value='1' >1</option>
    option value='2' >2</option>
    option value='3' >3</option>
    </select>
    
    <select id='w3'>
    option value='1' >1</option>
    option value='2' >2</option>
    option value='3' >3</option>
    </select>
    
    Мне нужно получить все option у select'a с id=w2. Это можно сделать одной регуляркой?
     
  13. wildshaman

    wildshaman Elder - Старейшина

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    Как сделать редирект с любго поддомена на страницы сайта?
    к примеру, с 1234.site.ru нa site.ru/1234
    при этом поддомены в панельке создавать по условию нельзя и поддомен может быть любым
     
  14. Nosfer

    Nosfer New Member

    Joined:
    10 Jan 2007
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Задача: составить регулярку.
    Условие, максимально 4 параметра 10D 10H 10M 10S, но все 4 никогда не встрчаются, обычно не более двух:
    а) на пыхе с использование preg_match_all
    б) парсим различные результаты, варианты входных данных:
    1) 6D 6H
    2) 9H 5M
    3) 1D 10M
    4) 10M 14S

    Сами параметры могут быть любыми, от 0 до 59.

    Необходимо несмотря из входных данных заполнить массив:

    [0] => Array
    (
    [0] => 6
    [1] => ''
    [2] => 1
    [3] => ''
    [1] => Array
    [0] => 6
    [1] => 9
    [2] => ''
    [3] => ''

    [2] => Array
    [0] => ''
    [1] => 5
    [2] => 10
    [3] => 10

    [3] => Array
    [0] => ''
    [1] => ''
    [2] => ''
    [3] => 14

    1й подмассив - D (дни), 2й подмассив - H (часы), 3й подмассив - M (минуты), 4й подмассив - S (секунды)


    Есть идеи?
     
  15. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    спасибо кэп! Я имел в виду, что мне нужно получить как value так и само значение между >1<.
     
  16. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    <?
    $text="<select id='w2'>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>";
    preg_match("/<select id='w2'>\r\n<option value='([0-9])'>(.*)<\/option>/s", $text, $m);
    preg_match("/<select id='w2'>\r\n(<option value='([0-9])'>(.*)<\/option>)/s", $text, $s);
    echo "сначала $s[1]<br> вконце $m[2]";
    ?>
    пробуй)
    З.Ы. Да,я извращенец
     
    #916 Compton, 6 Feb 2010
    Last edited: 6 Feb 2010
    1 person likes this.
  17. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    Получаю от сервера ответ в виде неполного XML (без заголовка <?xml ... ?>.
    Нужно распарсить таким образом: содержимое <input_img> в <img src="..." >, а <description> в <b>...</b> и вывести по порядку, как в XML'е.
    Как лучше сделать? Дописать заголовок в начало ( $request = '<?xml version="1.0" encoding="UTF-8"?>'.curl_exec($ch); ) и использовать xml_parser или нечего не записывать и регулярками пройтись? Помогите распарсить.

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
         <math>
    	<variant>
    	  <input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
    	<solve>
    	  <description>5</description>
    	  <answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
    	</solve>
    	<solve>
    	  <description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
    	</variant>
         </math>
     
    #917 draliokero, 7 Feb 2010
    Last edited: 7 Feb 2010
  18. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    может просто через preg_replace теги заменить?
    или я что не так понял?
     
  19. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Я тоже не совсем догоняю, но попробую предложить:
    PHP:
    <?php
    $result 
    '<?xml version="1.0" encoding="UTF-8"?>
         <math>
        <variant>
          <input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
        <solve>
          <description>5</description>
          <answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
        </solve>
        <solve>
          <description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
        </variant>
         </math>'
    ;

    $result preg_replace('#<input_img>(.*?)<\/input_img>#''<img src="\\1" >'$result);
    $result preg_replace('#<description>(.*?)<\/description>#''<b>\\1</b>'$result);
    echo 
    $result;
    ?>
     
  20. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    А можно сделать так, чтобы один массив заполнялся согласно одному рег. выражению:
    <description>(.*?)<\/description>|<input_img>(.*?)<\/input_img> ?
    preg_match_all вроде, но там многомерный массив получается и повторяются результаты
     
Thread Status:
Not open for further replies.