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

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

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

    onbka Member

    Joined:
    29 Oct 2009
    Messages:
    8
    Likes Received:
    7
    Reputations:
    0
    есть регулярка в замене такого вида

    $out = "file.txt";
    $out =~ s/(\.\w+)?$/.out/;

    понимаю тут почти все кроме "$", какую роль она здесь играет?
     
    1 person likes this.
  2. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Соответствует концу строки
     
    1 person likes this.
  3. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    Как заменить ошибку 404 на 301 (редирект на главную страницу) ?
     
  4. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Блин выручайте, мозг не варит.
    Никак не получается
    http://www.ripn.net/nic/whois/whois.cgi
    Пытаюсь достать Между двумя тегами <PRE> </PRE>
    Ничего не получается, выручайте.
    PHP:
    $pattern "#<PRE>(.*)?</PRE>#i";
        
    $pattern "/<PRE>(.*)<\/PRE>/";

        
    preg_match_all($pattern$text,$matches);
        if (
    preg_last_error() == PREG_NO_ERROR) {
        print 
    'There is no error.';
        }
        
    print_r($matches);
     
  5. killrok6

    killrok6 New Member

    Joined:
    30 Jul 2010
    Messages:
    33
    Likes Received:
    3
    Reputations:
    0
    На подобие?
    PHP:
    $var '<pre>pre1</pre><pre>pre2</pre><pre>pre3</pre>';
    if(
    preg_match('/<pre>.*<\/pre>/'$var$out)) {
        echo 
    $out['0'];        
    }
     
  6. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    HTML:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> 
    <html> 
    <head> 
     
    <title>whois 001.ru</title> 
    <link rel="stylesheet" href="/styles/basic.css"> 
    <link rev=made href="mailto:[email protected]"> 
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> 
     
    </head> 
    <body bgcolor="#FFFFFF" text="#000000"  link="#03388A" vlink="#555555" alink="#FF0000"> 
    <table align=center width=610 border=0 cellpadding=0 cellspacing=0> 
    <tr><td><a name="top"><div class="image"><img usemap="#head" src="/images/3dhead1.gif" border=0 width=610 height=72 alt=""></a><map name="head"><area shape=rect coords="3,14,145,69" href="/index.html" alt=" "></map></div></td></tr> 
    <tr><td><a onMouseOver="window.status='back'; return true;" onMouseOut="window.status=''; return true;" href="javascript: history.back();"><img src="/images/3d1.gif" width=69 height=17 border=0 alt="Назад"></a><a href="/search.html"><img src="/images/3d2.gif" width=66 height=17 border=0 alt="Поиск"></a><img src="/images/palka1.gif" width=104 height=17 border=0 alt=""><a href="/about/"><img src="/images/3d4.gif" width=83 height=17 border=0 alt="О РосНИИРОС"></a><a href="/nic/"><img src="/images/3d5.gif" width=201 height=17 border=0 alt="Сетевой информационный центр"></a><a href="/projects.html"><img src="/images/3d6.gif" width=87 height=17 border=0 alt="Проекты"></a></td></tr> 
    <tr><td align=left> 
    <table width=587 border=0 cellpadding=5 cellspacing=0> 
    <tr><td align=right> 
    <h3><font color="#0048B9">whois 001.ru</font></h3> 
    <br> 
    </td></tr> 
    <tr><td> 
    <PRE> 
    % By submitting a query to RIPN's Whois Service
    % you agree to abide by the following terms of use:
    % <A HREF="http://www.ripn.net/about/servpol.html" TARGET=_top>http://www.ripn.net/about/servpol.html</A>#3.2 (in Russian) 
    % <A HREF="http://www.ripn.net/about/en/servpol.html" TARGET=_top>http://www.ripn.net/about/en/servpol.html</A>#3.2 (in English).
     
    <B>domain:     001.RU
    </B>nserver:    ns.wm.ru.
    nserver:    ns1.wm.ru.
    state:      REGISTERED, DELEGATED, VERIFIED
    org:        Guild LLD Ltd.
    phone:      +7 095 973 43 65
    fax-no:     +7 095 978 69 63
    e-mail:     [email protected]
    registrar:  <a href="whois.cgi?RU-CENTER-REG-RIPN">RU-CENTER-REG-RIPN</A> 
    created:    2000.03.03
    paid-till:  2012.04.01
    source:     TCI
     
    <B>nic-hdl:    RU-CENTER-REG-RIPN
    </B>org:        Regional Network Information Center
    phone:      +7 495 737 0601
    fax-no:     +7 495 737 0602
    e-mail:     [email protected]
    www:        <A HREF="http://www.nic.ru" TARGET=_top>http://www.nic.ru</A> 
    whois:      whois.nic.ru
    source:     TCI
     
    Last updated on 2011.07.16 10:53:42 MSK/MSD
     
    </PRE> 
    </td></tr></table> 
    <br><br> 
    </td></tr> 
    <tr><td><a onMouseOver="window.status='back'; return true;" onMouseOut="window.status=''; return true;" href="javascript: history.back();"><img src="/images/3d7.gif" width=69 height=17 border=0 alt="Назад"></a><a href="/search.html"><img src="/images/3d8.gif" width=66 height=17 border=0 alt="Поиск"></a><a href="mailto:[email protected]"><img src="/images/3d9.gif" width=68 height=17 border=0 alt="Email"></a><img src="/images/3d10.gif" width=228 height=17 border=0 alt=""><a href="../index.html"><img src="/images/3d11.gif" width=179 height=17 border=0 alt="На главную страницу"></a></td></tr> 
    <tr><td><img src="/images/3d12.gif" width=610 height=3 border=0 alt=""></td></tr></table> 
    </body> 
    </html> 
    Не пойму где ошибка.
    Если
    PHP:
    $pattern "/<PRE>.*/";
    То выводит <PRE>
    Если
    PHP:
    $pattern "/<PRE>.*<\/PRE>/";
    Ничего нет!

    БЛИН ну я и Олень метасимвол s и всё работает!
    PHP:
    $pattern "/<PRE>.*<\/PRE>/s";
     
    #1546 ZnikiR, 16 Jul 2011
    Last edited: 16 Jul 2011
  7. GAiN

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

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Настройки .htaccess

    Скажите пожалуйста -можно ли реализовать такую настройку???
    - например лежат в одной директории 3 html файла:
    page1.html
    page2.html
    page3.html
    нужно сделать что при наборе адреса http://site.com/page1 не показывало .html
    я знаю способ когда кладёшь в папку файл и имя папки служит именем:


    PHP:
    #
    DirectoryIndex pages.html
    #
    ##########
    вот надо только для корневого каталога так сделать на файлы без папок
     
  8. Melfis

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

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    RewriteEngine On
    RewriteBase /
    RewriteRule ^page([0-9]*) /page$1.html
     
  9. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Привет, помогите с переадресацией на сайт без www

    Убрано высвечивание index.php
    Основной домен без www работает нормально (не показывает index.php в строке адреса)
    А когда происходит редирект с www домена то появляется в строке этот скрипт index.php и сайт говорит 404

    Пример:
    Обычный домен http://domen.com/page/contact
    Если зайти по http://www.domen.com/page/contact
    Идет редирект на http://domen.com/index.php/contact
    И происходит ошибка 404


    PHP:
    Options -Indexes
    Options 
    +FollowSymLinks
    IndexIgnore 
    */*
    RewriteEngine on

    # if a directory or a file exists, use it directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # otherwise forward it to index.php
    RewriteRule . index.php

    # redirect www
    #RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
     
  10. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Нужно вырвать урлы на картинки с гугла(именно на картинки сайтов, а не на картинки с кеша гугла):
    http://www.google.ru/search?hl=ru&newwindow=1&biw=1280&bih=923&gbv=2&tbm=isch&sa=1&q=java&oq=java&aq=f&aqi=&aql=&gs_sm=s&gs_upl=0l0l0l656683l0l0l0l0l0l0l0l0ll0l0

    Помогите пожалуйста составить регулярку.
     
  11. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    programming
    PHP:
    <?php
    $googleImgs 
    file_get_contents("http://www.google.ru/search?hl=ru&newwindow=1&biw=1280&bih=923&gbv=2&tbm=isch&sa=1&q=java&oq=java&aq=f&aqi=&aql=&gs_sm=s&gs_upl=0l0l0l656683l0l0l0l0l0l0l0l0ll0l0");
    preg_match_all("#\[\"/imgres\?imgurl.*?(http://[A-Za-z0-9.-]{1,}.*?\.[A-Za-z]{3,4})#"$googleImgs$matches);
    print_r($matches[1]);
    ?>
     
  12. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Здравствуйте, есть такой код:

    PHP:
    $str='
    [spoiler]
    Спойлер-1
    [/spoiler]

    [spoiler]
    Спойлер-2
      [spoiler]
      Спойлер-2-1
      [/spoiler]
      [spoiler]
      Спойлер-2-2
        [spoiler]
        Спойлер-2-2-1
        [/spoiler]
      [/spoiler]
      [spoiler]
      Спойлер-2-3
      [/spoiler]
    [/spoiler]

    [spoiler]
    Спойлер-3-s
    [/spoiler]
    '
    ;

    $str preg_replace_callback("#\[spoiler\]([^\[spoiler\]]+)\[/spoiler\]#si""spoiler"$str);
    while (
    preg_match("#\[spoiler\](.*?)\[/spoiler\]#si"$str)) $str preg_replace_callback("#\[spoiler\](.*)\[/spoiler\]#si""spoiler"$str);
    function 
    spoiler ($str) {return '<ul><li>'.$str[1].'</li></ul>';}
    echo 
    $str;
    но не могу понять как в исключения (кроме) "#^([^СЛОВО]+)$#si" сделать так что бы обрабатывалось СЛОВО целиком, а не один из символов, пробовал использовать ?! и ?<! но тогда вообще не работает...

    P.S
    Если заменять
    и
    на какие-нибудь одиночные символы и работать уже с этими символами, то всё нормально, т.е приходится использовать такой код:
    PHP:
    $str='
    [spoiler]
    Спойлер-1
    [/spoiler]

    [spoiler]
    Спойлер-2
      [spoiler]
      Спойлер-2-1
      [/spoiler]
      [spoiler]
      Спойлер-2-2
        [spoiler]
        Спойлер-2-2-1
        [/spoiler]
      [/spoiler]
      [spoiler]
      Спойлер-2-3
      [/spoiler]
    [/spoiler]

    [spoiler]
    Спойлер-3-s
    [/spoiler]
    '
    ;

    $str=preg_replace(array('#{|}#si','#\[spoiler\]#si','#\[/spoiler\]#si'),array('','{','}'),$str);
    $str preg_replace_callback("#{([^{]+)}#si""spoiler"$str);
    while (
    preg_match("#{(.*?)}#si"$str)) $str preg_replace_callback("#{(.*)}#si""spoiler"$str);
    function 
    spoiler ($str) {return '<ul><li>'.$str[1].'</li></ul>';}
    echo 
    $str;
     
    #1552 spamoney, 8 Aug 2011
    Last edited: 9 Aug 2011
  13. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Возможно не корректно объяснил, если проще, то нужна регулярка, которая бы нашла текст между , в которых нет вложенного
    , т.е из текста выше регулярка должна вернуть:
    Code:
    [0]=>Спойлер-1
    [1]=>Спойлер-2-1
    [2]=>Спойлер-2-2-1
    [3]=>Спойлер-2-3
    [4]=>Спойлер-3-s
     
  14. Melfis

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

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Хорошо, что ты уточнил, что тебе надо. А то нифига не было понятно.
    PHP:
    preg_match_all('#\[spoiler\]([ёЁа-яА-Яa-zA-Z0-9\n\r\t\s_-]*?)\[/spoiler]#'$str$matches);

    $newStr '';
    for (
    $i 0$i count($matches[1]); $i++) {
        
    $newStr .= "<ul><li>" $matches[1][$i] . "</li></ul>\n";
    }

    echo 
    $newStr;
    именно диапазоны букв, через точку может не работать. К тому же описав как у меня - ты исключишь xss. По желанию можно ещё добавить символы типа точки и запятой и т.п.

    upd. это всё чувствительно к кодировке файла.
     
    #1554 Melfis, 9 Aug 2011
    Last edited: 9 Aug 2011
  15. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Melfis, в теле тэга
    могут быть любые символы и буквы, в том числе и, допустим:

    Code:
    [spoiler] 
    Спойлер-3
    [ code]
    КОД
    [ /code]
    [/spoiler]
    
    Поэтому нужно исключить именно вложенный
    , т.е тут нужно как-то использовать позитивный/негативный просмотр вперёд/назад, т.е (?!шаблон), примерно так (код не рабочий):

    Code:
    preg_match_all('#\[spoiler\](.*?)(?!\[spoiler\])\[/spoiler\]#', $str, $matches);
     
  16. DiplomatQ

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

    Joined:
    4 Jun 2008
    Messages:
    48
    Likes Received:
    5
    Reputations:
    1
    Нашел на дружественном форуме
     
    #1556 DiplomatQ, 11 Aug 2011
    Last edited: 12 Aug 2011
  17. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Помогите спарсить колличество коннектов(цифра перед </textarea>)
    PHP:
    readonly>$ netstat -na grep :80 wc -l
    2
    </textarea>
     
    #1557 Rastamanka, 18 Aug 2011
    Last edited: 19 Aug 2011
    1 person likes this.
  18. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Rastamanka
    PHP:
    preg_match("#(\d+)\</textarea\>#"$str$match);
    print_r($match);
     
  19. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Помогите пожалуйста с регуляркой.

    Нужно из html текста который в переменной удалить все ссылки но с условием что внутри ссылки нет картинки

    <a href="...">text</a> - такое резать
    <a href="..."><img.....></a> - такое пропустить
     
  20. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    pcre:
    Code:
    <a href="[^"]++">(?!<img)[\s\S]+?</a>
    pcre, если внутри ссылки только текст:
    Code:
    <a href="[^"]++">[^<>]++</a>
    xpath:
    Code:
    //a[@href and not(img)]
     
    1 person likes this.
Thread Status:
Not open for further replies.