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

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

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

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    По-моему, в случае otRock можно просто убрать ведущие и замыкающие скобки, оставшееся скормить explode()
     
  2. otRock

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

    Joined:
    13 Aug 2008
    Messages:
    0
    Likes Received:
    5
    Reputations:
    0
    увы, но я не в PHP/
    Решил задачу вот таким образом
    Code:
    \(\[(?:([^,\n]+),?)*\]\)
    Вроде работает :)
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    otRock разбиение строки на подстроки, удаление символов из строки - есть в любом ЯП, поддерживающем также регулярные выражения. Советую воспользоваться идеей krypt3r
     
    _________________________
  4. rootmd

    rootmd New Member

    Joined:
    9 Dec 2010
    Messages:
    101
    Likes Received:
    3
    Reputations:
    -5
    stackoverflow.com/q/6252199/696948

    может кто-то помочь?
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    rootmd там вам уже ответили. Как вариант указывайте путь в индексному файлу, даже если его там нет

    З.Ы. кросспост одного вопроса в разные форумы - невежливый поступок
     
    _________________________
  6. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    возникла одна маленькая проблемка
    вот код страницы
    PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Style-Type" content="text/css" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Spaces/Лента</title>
    <style type="text/css">
    body{font-weight:normal;font-size:medium;font-family:Arial;background-color:#ffffff;margin:0px auto;padding:0px;color:#000000;text-align:left;max-width:500px}
    a:link,a:visited{color:#006699}
    a:visited{color:#666666;}
    a:hover{color: #ff0000;text-decoration: underline}
    a img{border: 0px;}

    div.row3{padding:3px;background-color:#e1e1e1}
    div.row4{padding:3px;background-color:#ffffff}
    div.blueline{padding:3px;background-color:#e7f1fe;border-top:1px solid #99ccff;border-bottom:1px solid #AFCDDC}
    div.busi{padding:3px;background-color:#fff9d7;border-top:1px solid #e2c822;border-bottom:1px solid #e2c822}
    div.backlink{background-color:#EFF3F6;padding:2px}
    div.block{margin:2px;padding:1px;border-top:1px dotted gray;border-bottom:1px dotted gray}
    div.title{padding:3px;background-color:#d7ddf8;border-bottom:1px dotted #AFCDDC}
    div.odd{padding:3px;background-color:#edeff4;border-top:1px dotted #CCC}
    div.even{padding:3px;background-color:#fff;border-top:1px dotted #CCC}
    div.blue{padding:3px;background-color:#e7f1fe;border-top:1px dotted #99ccff}
    #pnavi {padding:3px;background-color:#d3d3d3;border-top:1px solid #999}
    #pnavi a:link,#pnavi a:visited,#pnavi a:active  {text-decoration:none}
    #pnavi a:focus,#pnavi a:hover,#pnavi a:active {background-color:#fff}

    div.main {
        border-left: 1px solid #999999;
        border-right: 1px solid #999999;
        background-color: #ffffff;
    }

    #header_path{border-left:1px solid #abbefb;border-right:1px solid #abbefb;border-bottom:1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999;background:#E7F1FE;margin:0px;padding:3px}
    #footer_path{border-left:1px solid #abbefb;border-right:1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999;background:#E7F1FE;margin:0px;padding:3px}
    #header_path a:link,#header_path a:visited,#footer_path a:link,#footer_path a:visited {text-decoration:none}

    #reklama{
        background-color:#ccddee;
        border-left: 1px solid #999999;
        border-right: 1px solid #999999;
        border-top:1px solid #6699cc;
        border-bottom:1px solid #6699cc;
        padding:2px;
    }
    .block_hr {border-bottom:1px dotted #abbefb}
    .block_hrs {padding:2px;border-bottom:1px solid #999999;width:120px;}
    span.page {margin:2px;padding:1px;border:1px solid #e0e0e0}
    span.page_is {margin:2px;padding:1px;border:2px solid #339933}
    a.icolink {vertical-align: middle}
    img.icon {vertical-align: middle}
    .clear{ clear:both}


    #navi {color:#9999ff;font-size:small;padding:4px 2px 5px 4px;background-color:#aec6dc;border: 1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999}
    #navi a:link,#navi a:visited {color:#003366;text-decoration:none;font-size:small}
    #navi a:focus,#navi a:hover,#navi a:active {color:#3b5998;background-color:#fff}
    #time {color:#000;font-size:small;}
    .newevent {color:#ff0000;font-size:small;}
    </style>
    </head><body><div id="navi"><a href="http://spaces.ru/mysite/?sid=7020582082684759&amp;link_id=">Дом</a> | <a href="http://spaces.ru/mail2/?sid=7020582082684759&amp;link_id=">Почта</a> | <a href="http://spaces.ru/journal/?jsort=2&amp;filter=4&amp;sid=7020582082684759&amp;link_id=">Жур</a> | <a href="http://spaces.ru/lenta/?sid=7020582082684759&amp;link_id=">Лента<span class="newevent">(200)</span></a><br/><div id="time"">16:11:33 MSK</div></div><div id="header_path"><a href="http://spaces.ru/m/?sid=7020582082684759">Spaces</a>/<a href="http://spaces.ru/lenta/?sid=7020582082684759">Лента</a></div><div class="main">Вы зашли из необычного места. Убедитесь, что вы действительно находитесь на Spaces.ru.<br/>Чтобы продолжить, введите последние 4-ре цифры вашего номера:<br/><span style="color:green">+7925148 . . . .</span><br/><form method="POST" action="http://spaces.ru/mysite/?sid=7020582082684759"><input type="hidden" name="sid" value="7020582082684759"/><input type="hidden" name="name" value=""/><input type="text" name="pn_nums" size="4" value=""/> <input type="submit" value="Ввести"/></form><div class="busi"><span style="color:darkred;font-size:small">Если вы не помните свой номер, можете обратиться в Support.</span></div><div class="backlink"><img src="/img/Back.gif" alt=""/><a href="http://spaces.ru?sid=7020582082684759&amp;logout=1">Выход</a></div></div><div id="reklama"><img src="/img/reklama.gif" alt=""/><br/>
    <div style="text-align:center"><a href="http://partners.erwap.ru/?nato">Партнерская программа нового поколения</a><br/><a href="http://up.erwap.ru/?nato">Как не платить за телефон!</a></div></div><div id="footer_path"><a href="http://spaces.ru/m/?sid=7020582082684759">Spaces</a>/<a href="http://spaces.ru/lenta/?sid=7020582082684759">Лента</a></div><div id="navi"><a href="http://spaces.ru/?online_help=1&amp;sid=7020582082684759&amp;link_id="><span style="color:#009933">Помощь</span></a> | <a href="http://spaces.ru/mysite/?name=Veetoz&amp;sid=7020582082684759&amp;link_id=">Дом</a> | <a href="http://spaces.ru/favorites/?name=Veetoz&amp;sid=7020582082684759&amp;link_id=">Закл</a> | <a href="http://spaces.ru/forums/?sid=7020582082684759&amp;link_id=">Фор</a> | <a href="http://spaces.ru/diaries/?sid=7020582082684759&amp;link_id=">Дн-ки</a> | <a href="http://spaces.ru/chat/?sid=7020582082684759&amp;link_id=">Чат</a> | <a href="http://spaces.ru/mysite/?mycomm=1&amp;name=Veetoz&amp;sid=7020582082684759&amp;link_id=">Соо</a> | <a href="http://spaces.ru/shared_zone/?sid=7020582082684759&amp;link_id=">ЗО</a> | <a href="http://spaces.ru/settings/?sid=7020582082684759&amp;change=14&amp;link_id=">+</a></div><div class="row4"><script type="text/javascript" src="http://mobtop.ru/c/16.js"></script><noscript><a href="http://mobtop.ru/in/16"><img src="http://mobtop.ru/16.gif" alt="MobTop - top mobile rating"/></a></noscript></div>
    </body>
    </html>
    нужно спарсить ксс
    я делаю ето так

    PHP:
    preg_match_all("/<style type=\"text\/css\">(.*?)([.\n]+)<\/style>/s",$doc,$goom);  
    парсит та всё но некоторые части пропускает
    вот
    PHP:
    <style type="text/css">
    body{font-weight:normal;font-size:medium;font-family:Arial;background-color:#ffffff;margin:0px auto;padding:0px;color:#000000;text-align:left}
    a:link,a:visited{color:#006699}
    a:visited{color:#666666;}
    a:hover{color#ff0000;text-decoration: underline}
    a img{border0px;}
    .
    main{}
    div.row3{padding:1px;background-color:#e1e1e1}
    div.row4{padding:1px;background-color:#ffffff}
    div.backlink{background-color:#EFF3F6;padding:2px}
    div.blueline{padding:1px;background-color:#e7f1fe;border-top:1px solid #99ccff;border-bottom:1px solid #AFCDDC}
    div.block{margin:2px;padding:1px;border-top:1px dotted gray;border-bottom:1px dotted gray}
    div.busi{padding:2px;background-color:#fff9d7;border-top:1px solid #e2c822;border-bottom:1px solid #e2c822}
    div.title{padding:3px;background-color:#d7ddf8;border-bottom:1px dotted #AFCDDC}
    div.odd{padding:1px;background-color:#edeff4;border-top:1px dotted #CCC}
    div.even{padding:1px;background-color:#fff;border-top:1px dotted #CCC}
    div.blue{padding:3px;background-color:#e7f1fe;border-top:1px dotted #99ccff}
    #pnavi {padding:3px;background-color:#d3d3d3;border-top:1px solid #999}
    #pnavi a:link,#pnavi a:visited {text-decoration:none}
    #pnavi a:focus,#pnavi a:hover,#pnavi a:active {background-color:#fff}

    div.main {
    }

    #header_path{border-left:1px solid #abbefb;border-right:1px solid #abbefb;border-bottom:1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999;background:#e8e8e8;margin:0px;padding:3px}
    #footer_path{border-left:1px solid #abbefb;border-right:1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999;background:#e8e8e8;margin:0px;padding:3px}
    #header_path a:link,#header_path a:visited,#footer_path a:link,#footer_path a:visited {text-decoration:none}

    #reklama{
        
    background-color:#ccddee;
        
    border-left1px solid #999999;
        
    border-right1px solid #999999;
        
    border-top:1px solid #6699cc;
        
    border-bottom:1px solid #6699cc;
        
    padding:2px;
    }

    .
    block_hr {border-bottom:1px dotted #abbefb}
    .block_hrs {padding:2px;border-bottom:1px solid #999999;width:120px;}
    span.page {margin:2px;padding:1px;border:1px solid #e0e0e0}
    span.page_is {margin:2px;padding:1px;border:2px solid #339933}
    a.icolink {vertical-alignmiddle}
    img.icon {vertical-alignmiddle}
    .
    clearclear:both}

    #navi {color:#9999ff;font-size:small;padding:4px 2px 5px 4px;background-color:#aec6dc;border: 1px solid #abbefb;border-left: 1px solid #999999;border-right: 1px solid #999999}
    #navi a:link,#navi a:visited {color:#003366;text-decoration:none;font-size:small}
    #navi a:focus,#navi a:hover,#navi a:active {color:#3b5998;background-color:#fff}
    #time {color:#000;font-size:small;}
    .newevent {color:#ff0000;font-size:small;}
    </style


    как исправить штоб парсил всё и ничего не пропускал?
     
    #1526 qaz, 6 Jun 2011
    Last edited: 6 Jun 2011
  7. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    qaz скорей всего, тут дело не в регулярном выражении.

    Альтернативный вариант:
    PHP:
    <?php
    $html 
    = <<<HTML
    <?xml version="1.0" encoding="utf-8"?> 
    Your html code
    </body> 
    </html>
    HTML;
    $pos strpos($html'<style type="text/css">');
    $html substr($html$pos);
    $pos strpos($html'</head>');
    $css substr($html0$pos);
    echo 
    $css;
    ?>
     
    #1527 Skofield, 6 Jun 2011
    Last edited: 7 Jun 2011
  8. rootmd

    rootmd New Member

    Joined:
    9 Dec 2010
    Messages:
    101
    Likes Received:
    3
    Reputations:
    -5
    preg_match('/^(\d+):/',$source,$match)

    как это работает?
     
  9. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Совпадение в том случае, если строка начинается с цифр и после них стоит знак двоеточия. Скобки осуществляют поиск подшаблона, то есть в $match под индексом 1 будут цифры.

    ˆ - этот знак в шаблоне обозначает, чтобы в начале обязательно стояли следующие за ним символы.
    \d - любой цифровой символ [0-9]
    + - этот знак в шаблоне обозначает количество совпадений, это числитель 1 или более раз
    ( ) - эти знаки в шаблоне обозначают ограничители подшаблона, которые можно создавать и в дальнейшем ссылаться на них. Синтаксис подшаблона тот же самый что и у самого шаблона
    / - ограничитель шаблона им может служить любой не алфавитно-цифровой символ, кроме обратного слеша "\".
     
  10. Dimaus

    Dimaus Banned

    Joined:
    7 Nov 2008
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    выручите с RewriteRule в .htaccess

    site.ru/index.php?ret=ch&id=1&sec=1
    на
    site.ru/ret=ch&id=1&sec=1
    где 1 любое число

    написал так:
    RewriteRule ^ret=ch&id=([0-9_-]+)$1&sec=([0-9_-]+)$2 index.php?ret=ch&id=$1&sec=$2
    RewriteRule ^ret=ch&id=([0-9_-]+)/$1&seс=([0-9_-]+)/$2 index.php?ret=ch&id=$1&sec=$2
    но не работает..
     
  11. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    <?
    $r="Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10";

    preg_match_all("/(.*?)\/(.*?)/",$r,$q);

    echo $q[0][0];

    ?>



    мне нужно
    из ето всего только браузер Opera/9.80
    и система Windows NT

    как правильно составитьрегулярку штоб выдирала ети данные?
     
  12. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    qaz
    PHP:
    <?php
    $r 
    "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10";
    preg_match("#(.*?)\s\((.*?)\s\d\.\d\;.+\).+#"$r$q);
    print_r($q);
    ?>
     
  13. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    как в тексте убить все фразы "&#[0-9];"? Цифры могут быть любой длины
    Желательно через preg_replace()
     
    #1533 НTL, 26 Jun 2011
    Last edited: 26 Jun 2011
  14. chexec

    chexec Member

    Joined:
    19 Nov 2010
    Messages:
    67
    Likes Received:
    11
    Reputations:
    3
    Code:
    echo preg_replace("/&#\d+;/", "", "hheellllo ow owrolrdl!d!" )
    вообще-то это html entitles, и там они могут быть не любой длины) вот тут на форуме вообще их сразу в chr(\\1) запускает, а не удаляет
     
    #1534 chexec, 26 Jun 2011
    Last edited: 26 Jun 2011
  15. Dimaus

    Dimaus Banned

    Joined:
    7 Nov 2008
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    как правильно с RewriteRule в .htaccess

    нужно чтобы адрес
    site.ru/index.php?ret=ch&id=1&sec=1
    заменялся на
    site.ru/ret=ch&id=1&sec=1
    где 1 любое число

    написал так:
    Code:
    RewriteRule ^ret=ch&id=([0-9_-]+)$1&sec=([0-9_-]+)$2 index.php?ret=ch&id=$1&sec=$2
    RewriteRule ^ret=ch&id=([0-9_-]+)/$1&seс=([0-9_-]+)/$2 index.php?ret=ch&id=$1&sec=$2
    но не работает.., как правильно?
     
  16. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    RewriteRule ^ret=ch&id=([0-9_-]+)&sec=([0-9_-]+)$ index.php?ret=ch&id=$1&sec=$2
    
    только зачем это баловство, если можно обращаться по урлу site.ru/?ret=ch&id=1&sec=1, опустив index.php
     
  17. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Как регуляркой из номера телефона 79621112233

    мне нужно получить 962
     
  18. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    /^7(\d{3})\d{7}$/
    
     
    1 person likes this.
  19. acdel

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

    Joined:
    7 Jan 2008
    Messages:
    131
    Likes Received:
    57
    Reputations:
    3
    Исходник:
    HTML:
    <cite>site.com/<b>page.php</b></cite>
    Регулярка:
    Code:
    (?<=\<cite\>).*?(?=\<\/b\>\<\/cite\>)
    Получаю:
    Code:
    site.com/<b>page.php
    Нужно: site.com/page.php
    Буду признателен за помощь:)
     
  20. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    acdel
    PHP:
    <?php  
    $str 
    "<cite>site.com/<b>page.php</b></cite>";
    preg_match("#<cite>(.*?)<b>(.*?)</b></cite>#"$str$match);
    $result $match[1].$match[2];
    echo 
    $result;
    ?>
     
Thread Status:
Not open for further replies.