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

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

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

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    2Pashkela:

    Примерно такого содержания код страницы:
    PHP:
    <a href="javascript:openWindow('/
    berQ0p6inQ/')" 
    title="t">text here</a>
    <
    span>Enquire</span></a>
            </
    div><div class="buttonDetails">
    <
    class="button details" href="javascript:openWindow('/
    berQ0p6inQ/')" 
    title="t">and here text too</a>

    В первом случае встречается ссылка без указания class'а в другом с указанием class'a.

    Всего на странице около 7 ссылок и хотелось бы реализовать через preg_replace.

    Нужно заменить чудо:
    href="javascriptopenWindow('/berQ0p6inQ/')"
    на
    href="index.html"

    Вот и всё...
     
    #61 OnArs, 6 Dec 2008
    Last edited: 6 Dec 2008
  2. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    Ну как то так
    PHP:

    $sourc
    =<<<HERE
    <a href="javascript:openWindow('/
    berQ0p6inQ/')" title="t">text here</a>
    <span>Enquire</span></a>
            </div><div class="buttonDetails">
    <a class="button details" href="javascript:openWindow('/
    berQ0p6inQ/')" title="t">and here text too</a>
    <a href="javascript:openWindow('/
    berQ0p6inQ/')" title="t">text here</a>
    <span>Enquire</span></a>
            </div><div class="buttonDetails">
    <a class="button details" href="javascript:openWindow('/
    berQ0p6inQ/')" title="t">and here text too</a> 
    <a href="javascript:openWindow('/
    berQ0p6inQ/')" title="t">text here</a>
    <span>Enquire</span></a> 
    HERE;


      echo 
    preg_replace("|(javascript:openWindow\('\/.*\/'\))|sU""index.html",$sourc);

     
    1 person likes this.
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    /* Создай файл tema.txt и запихни туда следующее, чтобы проверить работу проги:

     <a href="javascript:openWindow('/berQ0p6inQ/')" title="t">text0</a> 
     <a class="button details" href="javascript:WINDOW('/berQ0341/')" title="t">text1</a> 
     <a class="button details" href="javascript:WINDOW('/berQ0342/')" title="t">text2</a> 
     <a class="button details" href="javascript:WINDOW('/berQ0343/')" title="t">text3</a>

    */


    /* Чтобы проверить результаты работы надо 
    запустить в опере, выйдет два столбика - 
    оригинал и измененный, просто поднести  мышку 
    и посмотреть, как изменились ссылки, также
     создается файл tema1.txt, где измененные исходники */

    $fp fopen("tema.txt""r");
    $list fread($fpfilesize("tema.txt"));
    fclose($fp);
    echo 
    $list "\r\n";   /* удалить потом, просто показывает как было в оригинале */
    /*--------------------------------------------------------------------------------------------------------------*/
    // Собственно сама замена
    /*------------------*/
    if (preg_match_all('/href="(.*)" title(.*)/i'$list$result)) 
    {
    $count count($result[1])-1;
    for (
    $i=0;$i<=$count;$i++) $list str_replace($result[1][$i], "index.html"$list);
    }
    /*------------------*/
    // Конец замены
    $fp fopen("tema1.txt""a+");
    fwrite($fp,$list "\r\n");
    fclose($fp);
    echo 
    $list "\r\n";
    /*-------------------------------------------------------------------------------------------------------------*/
    ?>
    будет работать независимо от содеражания
    того, что в кавычках "javascript:eek:penWindow('/
    berQ0p6inQ/')" и вообще легко подстраивается под
    любые нужды
     
    #63 Pashkela, 6 Dec 2008
    Last edited: 6 Dec 2008
    1 person likes this.
  4. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Еее!!! Большое Спасибо!!!
    Всё наконец то получилось, Сейчас раздам Плюсы! :)
     
    1 person likes this.
  5. _Kris_

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

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    Надо скопировать текст который находится между <b><kis="ar"> и </b>
    Вот вообщем надо регулярку, текст не в одну строку а в несколько.
     
  6. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    PHP:
    $w '<b><kis="ar"> и </b>';
    preg_match('#<b><kis\="ar">(.{0,})</b>#im',$w,$n);
    $a$n['1'];
    $b $n['1'];
     
    #66 Chaak, 7 Dec 2008
    Last edited: 7 Dec 2008
  7. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    PHP:
     $w = <<<THIS
     <b><kis="ar">мля большой при большой текст
    даеше и с прееводом строки 
    несколько 
    раз
     </b>  
     
    THIS;
     
    preg_match('#<b><kis\="ar">(.*?)</b>#is',$w,$n);


     
    print_r($n);

     
    1 person likes this.
  8. _Kris_

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

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    is - что это значит?
     
  9. _Kris_

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

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    Кстати не пашет.
     
    1 person likes this.
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    if (preg_match_all('/<b><kis(.*)>(.*)<\/b>/i'$list$result)) print_r ($result);
    в html весь текст идет сплошняком в одну строку, и те ВВОДЫ, что ты сделал вручную для перевода строки, не подействуют, пока не поставишь например <br> - а это уже совсем другая регулярка. Так что то, что выглядит текстом " в несколько строк" но не имеет внутри текста разделителей строк - просто текст в одну строчку

    Пробелы учитываются.
     
    #70 Pashkela, 7 Dec 2008
    Last edited: 7 Dec 2008
  11. AkyHa_MaTaTa

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

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    кстати пашет, модификатор шаблона s (PCRE_DOTALL) - будет означать что метасимвол "." означаюший любой символ будет также засчитываться и для переводов строки.
     
    #71 AkyHa_MaTaTa, 7 Dec 2008
    Last edited: 7 Dec 2008
  12. _==wolf==_

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

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    народ, читал читал, ну никак не доходят до меня регулярки, какой реврайт надо сделать чтобы было так. юзер заходит на pipiska.chlen.ru и ему показывают страницу chlen.ru/pipiska ? тоесть *.chlen.ru = chlen.ru/*
     
    1 person likes this.
  13. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    http://www.umaxforum.com/archive/index.php/t-3572.html
     
    1 person likes this.
  14. _==wolf==_

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

    Joined:
    29 May 2008
    Messages:
    127
    Likes Received:
    38
    Reputations:
    6
    cпасибо, сейчас попробую поставить, может заработает
     
  15. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Подскажите, нужно написать регулярку, для дополнительного поля профиля пользователя на форуме vBulletin

    Нужно исключить в этом поле "http" и прочие адреса сайтов.
    Спасибо!
     
    1 person likes this.
  16. m0nsieur

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

    Joined:
    8 Apr 2008
    Messages:
    223
    Likes Received:
    69
    Reputations:
    10
    попробуй так

    PHP:
    preg_match('/\\b(http:\/\/|)([-A-Z0-9.]+)(\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i'$subject)
     
  17. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    [​IMG]

    Мне вставить в это поле :
    Code:
    /\\b(http:\/\/|)([-A-Z0-9.]+)(\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i
    это допустимо будет?

    Задача исключить в этом поле, при регестрации пользователя - имена сайтов.
     
  18. ntldr

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

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    по идее, нет. Тогда он будет допускать только такие имена пользователей, которые похожи на адреса сайтов.
     
  19. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ? тут дело логики, а не регулярки.
     
  20. Ru}{eeZ

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

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    надо что-то типа:
    |.+[^http^https^ftp]*.+|
     
    1 person likes this.
Thread Status:
Not open for further replies.