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

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

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

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    PHP:
    curl_setopt($chCURLOPT_RETURNTRANSFER0);
    CURLOPT_RETURNTRANSFER: При установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его.
    Если нужно вернуть результат в переменную а не выветси в браузер то :

    PHP:
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    $res curl_exec($ch);
     
  2. Linuxoid

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

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Надо выдернуть вот эту строчку из текстового файла: "work_codes/14479-26/1320143--347514.jpg". В названии картинки постоянно меняются цифры.
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Linuxoid
    PHP:
    preg_match('#work_codes[^\']+#')
    Не делай бота под героев, надо играть честно :D
     
    _________________________
  4. Linuxoid

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

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Расскажу ситуацию про бота для героев.
    Играть в эту игру не буду. Зарегистрировался вчера с целью сделать бота. Просто это очень хороший пример, где можно автоматизировать некий процесс. Сам я только за честную игру, тем более в героях это мне и не надо.

    По коду: Не работает... Вот примерный пример. :)

    $preg = "</tr><tr><td class=wb><img src='work_codes/14480-26/1320143--347523.jpg' width=140 height=60 border=0 name=imgcode>";
    $capchalink = preg_match('#work_codes[^\']+#', $preg, $img);

    $img возвращает "Array". Саму ссылку на картинку не дергает.
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Linuxoid Прежде чем что-то автоматизировать - почитайте мануалы, например.

    PHP:
    $preg "</tr><tr><td class=wb><img src='work_codes/14480-26/1320143--347523.jpg' width=140 height=60 border=0 name=imgcode>";
    $capchalink preg_match('#work_codes[^\']+#'$preg$img);
    var_dump($img);
    // Или, если быть точным:
    echo "<h1>{$img[0]}</h1>";
     
    _________________________
    1 person likes this.
  6. AngelOfFaith

    AngelOfFaith Member

    Joined:
    2 Feb 2009
    Messages:
    6
    Likes Received:
    5
    Reputations:
    0
    как при помощи реврайта можно зделать чтобы всё запросы к сайту вида *.sait.ru отправлялись в одну папку, или прямо на скрипт? Например при запросе user.sait.ru браузер кидал на sait.ru/script.php?id=user , и при возможности что бы это делалось без доступа к конфам сервера
     
  7. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    что то типа этого:
    PHP:
    if (preg_match("#(.+).(.+).ru #i"$_SERVER['HTTP_HOST'])) { 
        
    header("Location: http://sait.ru/script.php?id=user"); 
    } else { 
        
    header("Location: http://sait.ru");
    }
     
    #607 L I G A, 25 Aug 2009
    Last edited: 25 Aug 2009
  8. AngelOfFaith

    AngelOfFaith Member

    Joined:
    2 Feb 2009
    Messages:
    6
    Likes Received:
    5
    Reputations:
    0
    И куда мне поставить этот скрипт? Мне надо что то типа автоматического создания поддомена, думаю это надо реализовать через htaccess, вот тока без доступа к конфигам такое не получается, а если есть доступ то надо при каждом добавлении такого поддомена перегружать апач
     
  9. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Мб кто поможет с регулярками в принципе раньше все норм было, сейчас вот вошёл в ступор, есть регулярка приблизительно такого вида :
    Code:
    r'''\<li class\=g\>\<h3 class\=r\>\<a href\=\"(.*?)\" class\=\l\>(.*?)\<\/a\>\<\/h3\>'''
    
    Знающие люди мну поймут :)

    Она собирает кортежи, состоящие из двух текстов
    Мне нужно, чтобы жрались все данные, кроме тех в которых встречается определенное слово (оно встречается в первой части (.*?)) т.е что-то типа (.*?[^\w someword]) как я понимаю, подскажите как это реализовать
    P.S. Язык - Python
    P.P.S. Если точно, то это даже не слово, а часть слова
    Короч, нужно отобрать все ссылки, кроме тех ссылок, в которых встречается определенное слово, т.е. из
    http://vasya.com
    http://vasya1.com
    http://vasya2.com
    http://vasya3.com
    http://vasya_name.com
    http://vasya_name2.com
    http://vasya_name3.com
    Нужно выбрать все ссылки, в которых НЕ встречается _name
    Эту очистку в принцип то можно сделать и средствами самого Python, но хочется переделать регулярку...
     
    #609 login999, 26 Aug 2009
    Last edited: 26 Aug 2009
    1 person likes this.
  10. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    У тебя в регулярке слишком много всего екранировано помоему.
     
    1 person likes this.
  11. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Да экранирование там в принципе не главное, просто регулярка хватает лишнее, выдирает как сами ссылки, так и целые блоки хтмл кода, они в принципе под нее подпадают...
    Там по принципу "Лучше перебдеть чем недобдеть"
     
    #611 login999, 26 Aug 2009
    Last edited: 26 Aug 2009
  12. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Конкретно для этого случая вот так примерно (на пыхе):

    PHP:
    <pre>
    <?php
    $s 
    '
       href="http://vasya.com "class
       href="http://vasya1.com "class
       href="http://vasya2.com "class
       href="http://vasya3.com "class
       href="http://vasya_name.com "class
       href="http://vasya_name1.com "class
       href="http://vasya_name2.com "class'
    ;

    preg_match_all('#href="(http://vasya[^_].*) "class#Uis',$s,$z);
    print_r($z);
    ?>
    </pre>
    целое слово-исключение как в регулярку поставить - хз

    Т.е. скорее всего никак, только если вторая регулярка по уже полученному массиву из первой или в цикле (опять же потом) прогонять полученные результаты на предмет совпадения ненужного слова в строке в целом
     
    #612 Pashkela, 26 Aug 2009
    Last edited: 26 Aug 2009
    1 person likes this.
  13. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Есть модРеврайт

    PHP:
    RewriteRule ^([a-zA-Z0-9]+)/  index.php?action=$1
    RewriteRule 
    ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/  index.php?action=$1&act=$2
    Но когда я сделал такой код перестались открываться файлы допустим css/style.css img/image.gif

    Как исправить?
     
  14. gumplen2006

    gumplen2006 New Member

    Joined:
    27 Aug 2009
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Хочу сделать следующую вещь: есть сайт, у которого много субдоменов, которые хранятся в папке subdomains/имя_субдомена. Я сделал следующий файл .htaccess:
    Code:
    RewriteCond %{HTTP_HOST} ^(.*)\.site\.com\.ua$
    RewriteRule (.*)$ subdomaine/%1/$1
    где %1 - должно быть имя субдомена, а $1 - имя открываемого файла.
    Что-то не пашет так. Работает только, когда прописываю так:
    Code:
    RewriteCond %{HTTP_HOST} ^(.*)\.site\.com\.ua$
    RewriteRule (.*)$ http://site.com.ua/subdomaine/%1/$1
    Но в таком случае пользователь видит адрес http://site.com.ua/subdomaine/имя_субдомена/имя_файла
    а я добиваюсь такого:
    http://имя_субдомена.site.com.ua/имя_файла
    В общем, помогите, кто чем может.
     
  15. gumplen2006

    gumplen2006 New Member

    Joined:
    27 Aug 2009
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Я вообще не спец, но, кажется, ты забыл добавить в регулярное выражение точку
     
  16. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Это ничего не меняет...
     
  17. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Byrger
    PHP:
    RewriteEngine On
    RewriteCond 
    %{REQUEST_FILENAME} !-
    RewriteRule 
    ^([a-zA-Z0-9]+)/  index.php?action=$1
    RewriteRule 
    ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/  index.php?action=$1&act=$2  
    gumplen2006 Так просто тут не получится, придется выкручиваться:
    PHP:
    RewriteEngine On

    RewriteCond   
    %{HTTP_HOST}            ^(www\.)?[^.]+\.site\.ru$
    RewriteCond   %{REQUEST_URI}        !/subdomaine
    RewriteRule   
    ^(.+)$                %{HTTP_HOST}$1          [C]
    RewriteRule   ^(www\.)?([^.]+)\.site\.ru/?(.*) /subdomaine/$2/$[L]
    AngelOfFaith Аналогично с предыдущим для вашего случая, только вместо subdomaine нужно будет писать путь до скрипта

    FireFenix Побуквенное отрицание не прокатит, если перед ним стоит .* какой нить, и даже без него - привяжется со второй буквы отрицание

    login999 Без условных подмасок перла - сложно, но возможно
    PHP:
    '''
       href="http://vasya.com "class
       href="http://vasya1.com "class
       href="http://vasya2.com "class
       href="http://vasya3.com "class
       href="http://vasya_name.com "class
       href="http://vasya_name1.com "class
       href="http://vasya_surname1.com "class
       href="http://vasya_familiya123123123.com "class
       href="http://vasya_name2.com "class'''

    print 'Пример с 3 словами're.findall(r'''(http://(?!.*(?:surname|familiya|name2))(?(1)|.*)\.com)''',a)
    print 
    'Пример с 2 словами're.findall(r'''(http://(?!.*(?:surname|name2))(?(1)|.*)\.com)''',a)
     
    _________________________
    #617 Gifts, 27 Aug 2009
    Last edited: 27 Aug 2009
    2 people like this.
  18. ph1l1ster

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

    Joined:
    11 Mar 2008
    Messages:
    396
    Likes Received:
    153
    Reputations:
    19
    del
     
    #618 ph1l1ster, 1 Sep 2009
    Last edited: 1 Sep 2009
  19. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ph1l1ster На перл сами переводите
    PHP:
    preg_match("~This links 666[\s\S]*?<td class="data">([^<]+)[\s\S]*?<td class="data">([^<]+)~msi",$in,$res);
     
    _________________________
    2 people like this.
  20. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Есть текст:

    PHP:
    <td width="25%">
                    <
    img src="http://www.converse.com/media/product/102740/standard/102740_m.jpg"/>
                    <
    br />
                    <
    a href="/products/shoes/sales/102740" title="Pro Leather 1976">Pro Leather 1976</a><br />
                    
    Price: $70
                
    </td>
            
                <
    td width="25%">
                    <
    img src="http://www.converse.com/media/product/102741/standard/102741_m.jpg"/>
                    <
    br />
                    <
    a href="/products/shoes/sales/102741" title="Pro Leather 1976">Pro Leather 1976</a><br />
                    
    Price: $70
                
    </td>
            
                <
    td width="25%">
                    <
    img src="http://www.converse.com/media/product/508726/standard/508726_m.jpg"/>
                    <
    br />
                    <
    a href="/products/shoes/sales/508726" title="Angeles LE">Angeles LE</a><br />
                    
    Price: $55
                
    </td>
    Нужно его распарсить, что бы его получить массив, в котором значения, это то, что между <td width="25%"> и </td>

    Нужен результат


    PHP:
    $sPattern '|(.*)<td width="25%">(.*)</td>(.*)|s';
    preg_match_all$sPattern$this->sContent$aMatches );
    print_r$aMatches[2] );
    Запоминает, тольк то, что в ПОСЛЕДНЕЙ я чейке
    Нужно запомнить все ячейки

    Спасибо!
     
    #620 Naydav, 4 Sep 2009
    Last edited: 4 Sep 2009
Thread Status:
Not open for further replies.