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

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

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

    IGL New Member

    Joined:
    16 Nov 2007
    Messages:
    41
    Likes Received:
    0
    Reputations:
    0
    чет у меня ничего не выходит прошу помощи...
    есть страница с таким содержимым:
    HTML:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Icecast Streaming Media Server</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
    </head> 
    <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0"> 
    <h2>Icecast2 Status</h2> 
    <br><div class="roundcont"> 
    <div class="roundtop"><img src="/corner_topleft.jpg" class="corner" style="display: none"></div> 
    <table border="0" width="100%" id="table1" cellspacing="0" cellpadding="4"><tr><td bgcolor="#656565"> 
    <a class="nav" href="admin/">Administration</a><a class="nav" href="status.xsl">Server Status</a><a class="nav" href="server_version.xsl">Version</a> 
    </td></tr></table> 
    <div class="roundbottom"><img src="/corner_bottomleft.jpg" class="corner" style="display: none"></div> 
    </div> 
    <br><br><div class="roundcont"> 
    <div class="roundtop">img src="/corner_topleft.jpg" class="corner" style="display: none"></div> 
    <div class="newscontent"> 
    <div class="streamheader"><table cellspacing="0" cellpadding="0"> 
    <colgroup align="left"></colgroup> 
    <colgroup align="right" width="300"></colgroup> 
    <tr> 
    <td><h3>Mount Point /bot.mp3</h3></td> 
    <td align="right"> 
    <a href="/bot.mp3.m3u">M3U</a><a href="/bot.mp3.xspf">XSPF</a> 
    </td> 
    </tr> 
    </table></div> 
    <table border="0" cellpadding="4"> 
    <tr> 
    <td>Stream Title:</td> 
    <td class="streamdata">RJ Bot</td> 
    </tr> 
    <tr> 
    <td>Stream Description:</td> 
    <td class="streamdata">OWBED!!1</td> 
    </tr> 
    <tr> 
    <td>Content Type:</td> 
    <td class="streamdata">audio/mpeg</td> 
    </tr> 
    <tr> 
    <td>Mount started:</td> 
    <td class="streamdata">Mon, 23 May 2011 12:54:32 +0200</td> 
    </tr> 
    <tr> 
    <td>Current Listeners:</td> 
    <td class="streamdata">15</td> 
    </tr> 
    <tr> 
    <td>Peak Listeners:</td> 
    <td class="streamdata">68</td> 
    </tr> 
    <tr> 
    <td>Stream Genre:</td> 
    <td class="streamdata">Various</td> 
    </tr> 
    <tr> 
    <td>Stream URL:</td> 
    <td class="streamdata"><a target="_blank" href="http://gxxxxm.rxxx">http://gxxxxxxm.rxxx</a></td> 
    </tr> 
    <tr> 
    <td>Current Song:</td> 
    <td class="streamdata">pesenka_-_nazvanie</td> 
    </tr> 
    </table> 
    </div> 
    <div class="roundbottom"><img src="/corner_bottomleft.jpg" class="corner" style="display: none"></div> 
    </div> 
    <br><br>&nbsp; 
    </body> 
    </html> 
    
    не получается из :
    HTML:
    <td>Current Listeners:</td> 
    <td class="streamdata">15</td> 
    </tr> 
    выдрать только текущих слушателей...

    я пробовал так
    PHP:
    #<td>Peak Listeners:<\/td><td class=\"streamdata\">(.*)<\/td><\/tr>#i
     
  2. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Rastamanka,
    preg_match_all('#<art\|(\d+)\|(.*?)\|(.*?)\|\d+>#', $str, $matches);
    print_r($matches);
     
  3. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    IGL,
    PHP:
    preg_match('#<td>Current Listeners:<\/td>.*?<td class=\"streamdata\">(\d+)<\/td>#is'$str$match);
    print_r($match);
     
  4. domenz

    domenz New Member

    Joined:
    18 May 2011
    Messages:
    26
    Likes Received:
    0
    Reputations:
    0
    строка:
    нужно удалить все @VasilyKirillin.

    @VasilyKirillin - после @ может быть сколько угодно символов, букв, английских символов.
     
  5. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    $str = preg_replace ('/\@.*?/', '', $str);
     
  6. domenz

    domenz New Member

    Joined:
    18 May 2011
    Messages:
    26
    Likes Received:
    0
    Reputations:
    0
    спасибо.
    PHP:
               $string=preg_replace("/[a-zA-Z]{1,30}/i",""$posts[$i][$x]['desc']);
               
    $string=preg_replace("/@/i",""$string);
    Как их объединиить в одну, чтобы она удаляла или символы английские или @ ?
     
    #1506 domenz, 31 May 2011
    Last edited: 31 May 2011
  7. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    domenz, добавив в шаблон логическое или - |
    #а|о#
    такой шаблон ищет "a", если не найдет, будет искать "о".
     
    #1507 Skofield, 31 May 2011
    Last edited: 31 May 2011
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    domenz что значит "или"? В посте #1511 и #1513 вы спрашиваете одно и то же, или это две разные мысли?

    Skofield в общем-то вы не правы
     
    _________________________
  9. PROPH3T

    PROPH3T New Member

    Joined:
    20 Nov 2007
    Messages:
    23
    Likes Received:
    1
    Reputations:
    0
    Помогите с регуляркой, необходимо отпарсить со страницы все значения, которые находятся в следующем виде:

    Code:
    <span class="like_count fl_l" id="like_count-12345678_[COLOR=Sienna][B]789[/B][/COLOR]">[COLOR=Green][B]6[/B][/COLOR]</span>
    где:
    789 - динамические цифры (не нужные)
    6 - значение, которое собственно и надо сграббить (не обязательно состоит из 1й цифры)

    Пробовал так

    PHP:
    $res preg_match_all("id=\"like_count-12345678_\d\d\d\">(.*)</span>"$res);
    Ошибка:

    Code:
    preg_match_all() expects at least 3 parameters, 2 given in
    Пробовал добавить один параметр, но тогда пишет, мол он слишком длинный, как быть?
    Сразу извиняюсь за криворукость, с регулярками пока как-то тяжко..)
     
  10. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PHP:
    preg_match_all ('#<span.*?id="like_count-12345678_\d+">(\d+)</span>#'$str$m);
    echo 
    $m[1][0], "\n";
     
    #1510 krypt3r, 4 Jun 2011
    Last edited: 4 Jun 2011
  11. PROPH3T

    PROPH3T New Member

    Joined:
    20 Nov 2007
    Messages:
    23
    Likes Received:
    1
    Reputations:
    0
    Тогда почему, если я потом вывожу $m, возвращается просто "Array" ? Попробовал даже конкретно в этой одной строке данной регуляркой отпарсить цифру 6
     
  12. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    PROPH3T
    print_r($m);
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    PROPH3T preg_match_all в третьем параметре возвращает двумерный массив значений, следовательно и обращаться следует по индексу:
    PHP:
    var_dump($m); 
    // Или, например: 
    echo $m[0][0];
     
    _________________________
  14. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Пост свой поправил, чтобы понятнее было, куда искомое значение попадает
     
  15. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Есть конструкция данных такого вида
    Code:
    [['','','','','','',["", "", "", "", "", 0, ""]],['','','','','','',["", "", "", "", "", 0, ""]]]
    Нужно выбрать последовательные секции, то бишь
    Code:
    ['','','','','','',["", "", "", "", "", 0, ""]] 
    и т.д. (между кавычками любая инфа может быть)
    Затем из каждой выбранной секции (отдельным регулярным выражением) выбрать вложенную в нее, то есть
    Code:
    ["", "", "", "", "", 0, ""]
    Знаки '[' ']' в выборку входить не должны.
    Заранее спасибо за помощь!
     
  16. otRock

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

    Joined:
    13 Aug 2008
    Messages:
    0
    Likes Received:
    5
    Reputations:
    0
    У меня попроще, но после бессонной ночи голова уже совсем не думает)
    на входе строка вида:
    Code:
    ([32,42,153,106,9,168,28,68])
    помогите вытащить только числа
     
  17. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Margin
    Смахивает на многомерный массив. Не легче будет обработать строку и преобразовать ее в массив? Ну смотря на каком языке работаешь.
     
  18. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Ах да забыл написать, что работаю на PHP
     
  19. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    otRock #\(\[(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\]\)#
    С учетом, если в строке, кроме ([32,42,153,106,9,168,28,68]) есть еще какие-либо данные
     
    #1519 Skofield, 4 Jun 2011
    Last edited: 4 Jun 2011
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    otRock
    PHP:
    $in '([32,42,153,106,9,168,28,68])';
    preg_match_all('~\d+~'$in$out);
    var_dump($out);
    Margin как то очень похоже на JSON. Попробуйте так и работайте как с массивом:
    PHP:
    $z = <<<HTT
    [['','','','','','',["", "", "", "", "", 0, ""]],['','','','','','',["", "", "", "", "", 0, ""]]]
    HTT;
    $arr json_decode(str_replace("'"'"'$z))
    var_dump($arr);
     
    _________________________
    #1520 Gifts, 4 Jun 2011
    Last edited: 4 Jun 2011
Thread Status:
Not open for further replies.