За последние 24 часа нас посетили 17413 программистов и 1722 робота. Сейчас ищут 1046 программистов ...

Какое регулярное выражение нужно?

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

  1. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Есть строка:
    HTML:
    1. <div id="prj123" class="test"><div class="form">текст</div><div class="form_in"><ul><li>текст3</li></ul></div></div>
    2.  
    3. <div id="prj124" class="test"><div class="form">текст2</div><div class="form_in"><ul><li>текст32</li></ul></div></div>
    и т.д.
    Мне нужно массив сделать, чтобы напиример 1 элемент этого массива был
    <div id="prj123" class="test"><div class="form">текст</div><div class="form_in"><ul><li>текст</li></ul></div></div>
    Второй
    <div id="prj124" class="test"><div class="form">текст</div><div class="form_in"><ul><li>текст</li></ul></div></div>
    И т.д.
    Но у меня не получается составить регулярное выражение для этого, пробывал такое:
    Код (Text):
    1. /<div id=\"[^`]*\" class=\"testl\">[^`]*\<\/div>/
    Но здесь немного не правильно, т.к. div ещё закрывается внутри div`а, который мне нужен
    Подскажите пож-та как такое реализовать?
     
  2. Easy

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

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    PHP:
    1. <?php
    2. $str = <<<STR
    3. <div id="prj123" class="test"><div class="form">текст</div><div class="form_in"><ul><li>текст3</li></ul></div></div>
    4.  
    5. <div id="prj124" class="test"><div class="form">текст2</div><div class="form_in"><ul><li>текст32</li></ul></div></div>
    6. STR;
    7.  
    8. preg_match_all('/<div id="prj.*v><\/div>/Usi', $str, $match);
    9.  
    10. var_dump($match);
     
  3. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Блин, думал разберусь. Тогда вот настоящий div, который будет, с ним почему-то не проходит такая штука. Вот какие div у меня (это один из них):
    HTML:
    1. [b]<div class="test"  id="prj786272">[/b]
    2.     <div class="form">
    3.         <div class="form-in">
    4.  
    5.                                                 <var class="bujet">text</var>
    6.  
    7.                                                 <a href="http://" target="_blank">
    8.                 <img src="" alt="" class="prj-clogo" />
    9.  
    10.             </a>
    11.  
    12.                         <h3>
    13.                                 <img src="/images/tp.png" alt="" />
    14.                                 <a name="prj786272" href="/projects/?pid=786272">
    15.                     text2               </a>
    16.             </h3>
    17.  
    18.                         <div class="prj-full-display">
    19.                 <div class="utxt">
    20. <p>text3</p>
    21.                 </div>
    22.  
    23.                 <div id="project-reason-786272" style="display: none">
    24.                                     </div>
    25.  
    26.  
    27.  
    28.                 <ul class="prj-info c">
    29.                     <li class="pi-answer">
    30.                                                 <a href="">text4</a>
    31.                                                
    32.                                             </li>
    33.                                         <li class="pi-payed">text5</li>
    34.  
    35.                                         <li class="pi-time">text6</li>
    36.  
    37.                 </ul>
    38.             </div>
    39.         </div>
    40.     </div>
    41.     [b]</div>[/b]
    С такими не работает( Почему?
     
  4. Easy

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

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    ну можно как то так
    HTML:
    1. preg_match_all('/<div class="test"  id="prj.*<\/div>\s*<\/div>\s*<\/div>\s*<\/div>/Usi', $str, $match);
     
  5. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Easy,
    Спасибо, Вы очень помогли.
     
  6. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    Ещё проблема возникла( Вот такой html, помогите пож-та:
    HTML:
    1. <tr>
    2.           <td class="center-align">
    3.             <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="8" height="8" id="imgM" align="bottom" border="0">
    4.               <param name="allowScriptAccess" value="sameDomain"/>
    5.               <param name="movie" value="">
    6.               <param name="quality" value="high"/>
    7.  
    8.               <param name="bgcolor" value="#937E51"/>
    9.               <embed
    10.                src=""
    11.                quality="high"
    12.                bgcolor="#937E51"
    13.                width="8"
    14.                height="8"
    15.                name="imgM"
    16.                align="top"
    17.                allowScriptAccess="sameDomain"
    18.                type="application/x-shockwave-flash"
    19.                pluginspage="http://www.macromedia.com/go/getflashplayer"/>
    20.             </object>
    21.           </td>
    22.           <td align="left" style="smalltext">
    23.             <a href="">
    24.               ТЕСТ1
    25.             </a>
    26.           </td>
    27.  
    28.           <td align="center" style="smalltext">
    29.             ТЕСТ4
    30.           </td>
    31.           <td align="center" style="smalltext">
    32.             ТЕСТ
    33.           </td>
    34.          
    35.         </tr>
    Вот такие <tr> есть, во всех td разные данные в каждой tr. Мне нужно чтобы preg_match_all возвращал массив tr в которой в последний td равен "ТЕСТ". Я такой написал:
    PHP:
    1. <?php
    2. preg_match_all('/<tr>\r\n[ ]{10}<td class="center-align">\r\n[ ]{12}<object.*>.*<\/object>\r\n[ ]{10}<\/td>.*<td align="center" style="smalltext">.*<td align="center" style="smalltext">.*ТЕСТ.*<\/tr>/Usi', $pars, $pars2);
    3. ?>
    4.  
    Но возвращает все tr до "ТЕСТ" и следущее элементы массива также. Конечно можно было доработать explode`м, но хотелось бы одним рег выражением, но не получается(
    P.S. Что означает Usi?
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
  8. MCTrane

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

    С нами с:
    14 ноя 2009
    Сообщения:
    217
    Симпатии:
    0
    У меня есть такая картинка. Значит Usi это U s i, да? Что-то и не догадался...
    А почему моё выражение не правильно работает?
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    \r\n[ ]{10}
    это говно! сделай \s* во всех подобных местах
    и добавь модификатор m