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

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

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

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    PHP:
    RewriteEngine On
    RewriteBase 
    /


    RewriteRule ^  index.php

    RewriteRule 
    ^(.*)/(.*)/    index.php?t=$1&f=$2


    RewriteCond 
    %{REQUEST_FILENAME} !-f
    RewriteCond 
    %{REQUEST_FILENAME} !-d
    RewriteRule 
    ^([^.]+)$ /index.php
    Вроде немного начал работать...
    А как сделать если допустим f=123/asd Он такое не воспринимает...
     
  2. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Пиплы! Захотелось вот написать парсер ящиков от mail.ru(возможно,и других,но пока хватает и этого)

    Вроде всё норм,но когда вот дохожу до количества писем,обламываюсь регуляркой:

    PHP:

    <?php

    $i 
    0;

    $ch curl_init();

    $url "http://xhtml.wap.mail.ru/cgi-bin/auth?rand=3512944353";

    $url1 "http://xhtml.wap.mail.ru/cgi-bin/msglist?folder=0";

    $url2 "http://xhtml.wap.mail.ru/cgi-bin/start";

    $req "Login=welya.icq&Domain=mail.ru&Password=ko4ka&page=&submit=Вход";

    $ua "IE 6.0";

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$req);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

    $res curl_exec($ch);

    curl_close($ch);


    $ch curl_init();

    curl_setopt($ch,CURLOPT_URL,$url1);
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

    $res curl_exec($ch);

    if(
    preg_match_all("|<a class=\"lnk_b\" href=\"(.*)\">(.*)</a><br />|",$res,$r)) {


    foreach(
    $r[2] as $v) {


    if(
    strlen($v) == 213) {

    $i++;


    }



    }


    }




    curl_close($ch);

    $ch curl_init();

    curl_setopt($ch,CURLOPT_URL,$url2);
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);


    $res curl_exec($ch);


    if(
    preg_match("|Тут_Шаблон_Для_Выдирания_Числа_Входящих_Писем|",$res,$t)) {

    print_r($t);

    }





    ?>

    Это далеко не готовый скрипт,а лишь наработка.Проблема состоит именно в том,какая регулярка нужна для выдирания Входящих писем.Там куча символов...пробовал,ничего не возвращает.Может,дабы не мучиться,скажете,есть ли такие программы в свободном обиходе?)(Парсинг определённых заголовков писем и его содержимым).
     
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Эм-м, а ключевое слово "Входящие" и число напротив не подходят?
     
  4. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Нет,не работает:(.Пробовал
     
  5. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Всего писем (адрес страницы сам знаешь, там где написано "Входящие"):

    PHP:
    <?php
    $in
    ='title="Входящие">Новых&nbsp;писем:&nbsp;<b>8</b></a>';
    preg_match('|title="Входящие">Новых&nbsp;писем:&nbsp;<b>(.*)</b></a>|Ui',$in,$res);
    print_r ($res[1]);
    ?>
    Заголовки писем (уже внутри "Входящие"):

    PHP:
    <?php
    $in
    ='<td class=lettem><a href="readmsg?id=12409073890000010683">Автомобильные пробки в реальном времени на Картах@Mail.Ru </a></td>';
    preg_match_all('|<td class=lettem><a href=".*">(.*)</a></td>|Ui',$in,$res);
    print_r ($res[1]);
    ?>
     
  6. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    как регулярке указать промежуток от нуля до 255? чего-то я забыл

    PHP:
    preg_match('|^[0-255]{1,3}$|',$_POST['ipPart3'])
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ru}{eeZ Никак.

    PHP:
    if (is_numeric($_POST['ipPart3']) && intval($_POST['ipPart3'])>&& intval($_POST['ipPart3'])<255)
     
    _________________________
  8. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Эээ,Паш,не знаю,где ты нашёл там это:),но я этого не видел.Зато смог сам разобраться не без твоей помощи:).:

    PHP:

    <?php

    $i 
    0;
    $url "http://xhtml.wap.mail.ru/cgi-bin/auth?rand=3512944353";
    $page 1;
    $links = array();
    $messages = array();
    $url1 "http://xhtml.wap.mail.ru/cgi-bin/msglist?folder=0";
    $req "Login=welya.icq&Domain=mail.ru&Password=ko4ka&page=&submit=Вход";
    $ua "IE 6.0";

    $ch curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_HEADER,1);
    curl_setopt($ch,CURLOPT_NOBODY,0);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$req);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

    $res curl_exec($ch);

    if(
    preg_match_all('|<strong>[0-9]{1,10}</strong>&nbsp;(.*)|',$res,$m)) {

    foreach(
    $m[1] as $m1) {

    echo 
    "<center>Входящие: $m1 </center><br>";
    break;
    $x $m1/5;
    $x round($x);



    }


    }

    curl_close($ch);

    /* ///////////////////////////////////////////// */


    $theme "Forum.Злой.org <[email protected]>";


    while(
    $page $x) {

    $ch curl_init();

    curl_setopt($ch,CURLOPT_URL,$url1);
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);



    $res curl_exec($ch);



    if(
    preg_match_all('|<a class="lnk_b" href="(.*)"><b>(.*)</b></a><br />|',$res,$m)) {

    echo 
    "<center>Ссылки на сообщения</center><br>";

    foreach(
    $m[1] as $d) {

    echo 
    "<center>$d</center>";

    $links[] = $d;

    }

    echo 
    "<br>";


    echo 
    "<center>Список тем:</center><br>";

    foreach(
    $m[2] as $d1) {

    echo 
    "<center>$d1</center>";

    $messages[] = $d1;

    }

    }

    curl_close($ch);


    /* ///////////////////////////////////////////////////////////////// */


    $ch curl_init();

    curl_setopt($ch,CURLOPT_URL,"http://xhtml.wap.mail.ru/msglist?folder=0&page=$page");
    curl_setopt($ch,CURLOPT_USERAGENT,$ua);
    curl_setopt($ch,CURLOPT_COOKIEFILE,"./cookie");
    curl_setopt($ch,CURLOPT_COOKIEJAR,"./cookie");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

    $res curl_exec($ch);

    curl_close($ch);


    }

    ?>

    Запара теперь с циклом прогона страниц.По идее,всё правильно.Сначала выводит ссылки на сообщения и сами темы,потом делает запрос на следующую страницу,потом всё сначала,а выходит,что он выводит только Входящие сообщения и отрубается.Ещё проблема состоит в том,как посчитать количество сообщений(Входящих),и одновременно убрать переменную из цикла...А то скрипт при переходе на каждую страницу будет пытаться считать количество входящих сообщений заного,что не есть хорошо.У кого какие идеи ?

    ЗЫ: Для тестов я брал другое мыло.
     
    #428 Велемир, 22 May 2009
    Last edited: 22 May 2009
  9. iv.

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

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    подскажите регулярку для выделения домена из ссылок.

    т.е. дано:
    domain.com
    www.domain.com
    qwe.domain.com
    qwe.rty.domain.com
    ...
    qwe.rty.domain.com/index.html
    ...

    надо чтобы по всем этим строкам выдавалось domain.com
    дальше этого не думается:
    Code:
    ([^/]*)
    эта регулярка берет всё пока не встречает символ "/"
    надо ещё избавится от поддоменов и оставить строки типа "domain.com", если они уже в таком виде
    спасибо

    пс: питон
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    iv. Непонятно в каком виде исходный текст, если в каждой строчке по адресу - то будет так
    Code:
    import re
    dom = 'domain.com\r\nwww.domain.com\r\nqwe.domain.com\r\nqwe.rty.domain.com\r\nqwe.rty.domain.com/index.html'
    out = re.findall(r'(\w+\.\w+)[\s/<>"\']',dom)
    print set(out)
     
    _________________________
    #430 Gifts, 1 Jun 2009
    Last edited: 1 Jun 2009
  11. iv.

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

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Не совсем осознал как работает (\w+\.\w+)[\s/<>"\'] ну ладно. Исходный текст на самом деле в хтмл и ссылка находится в теге <cite>. Ну и так я собственно получаю url до слэша:
    Code:
    <cite>([^/]*)</cite>
    Нужно получить домен 2 уровня из этого дела.
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    iv. Странно, что ваша регулярка вообще работает. Она забирает все, что находится внутри тегов <cite/> если там не содержится слеш

    И чем вам моя не нравится? Если забирает много ненужного, тогда так:

    Code:
    import re
    dom = '''<cite>domain3.com</cite>sad ja sad. asda  da.das asda. asdasdaswq.
    sadas awe.q eqw .eqweqwe .qw eqwesa . <cite>www.domain3.com</cite>
    <cite>qwe.domain1.com</cite> Lorem ipsum sit amet
    <cite> http://qwe.rty.domain1.com</cite>
    <cite>qwe.rty.domain2.com/index.html</cite>'''
    out = re.findall(r'''<cite>.*?(\w+\.\w+)[\s/<>"']''',dom)
    print set(out)
    
    Все домены второго уровня без повторов
     
    _________________________
    1 person likes this.
  13. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    помогите мне сделать регулярку чтобы проверяла чтобы в тексте было или <a href="текст" alt="текст">Текст</a> или <a href="текст" alt="текст"><img scr="текст" alt="Текст" /></a>. Чтобы проверяло или есть что то из этого но ничего кроме
     
  14. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    PHP:
    #<a href=".*" alt=".*">.*</a>|<a href=".*" alt=".*"><img scr=".*" alt=".*" \/></a>#
     
    #434 mailbrush, 4 Jun 2009
    Last edited: 4 Jun 2009
    1 person likes this.
  15. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    спс =) ща проверю
     
  16. iv.

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

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    хм? какой текст?
    Code:
    "<a href="[-_a-zA-Z\. /]+" alt="[-_a-zA-Z\. /]+">[-_a-zA-Z\. /]+</a>|<a href="[-_a-zA-Z\. /]+" alt="[-_a-zA-Z\. /]+"><img scr="[-_a-zA-Z\. /]+" alt="[-_a-zA-Z\. /]+" /></a>"
    либо тупо любые символы:
    Code:
    "<a href=".+" alt=".+">.+</a>|<a href=".+" alt=".+"><img scr=".+" alt=".+" /></a>
     
  17. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    а что / и /si или # # не ставляться начале и в конце ?
     
  18. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    img
    PHP:
    "<img[\s]*src[\s]*=[\s]*([^>]*)"
    href
    PHP:
    "<[\s]*a[\s]*href[\s]*=[\s]*([^>]*)>([^<]*)<[\s]*/[\s]*a[\s]*>"
    Писал по памяти, мог ошибится
    Долго вспомниал, уже ответили :(
     
    #438 FireFenix, 4 Jun 2009
    Last edited: 4 Jun 2009
  19. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    // - граница регулярного выражения

    si - модификаторы

    s - метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк

    i - символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра
     
  20. alwex

    alwex New Member

    Joined:
    14 Dec 2008
    Messages:
    137
    Likes Received:
    4
    Reputations:
    2
    парни, вы меня выручили, спасибо огромное, я заюзал вариант mailbrush потому-что у него самый подходящий
     
Thread Status:
Not open for further replies.