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

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

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Так есть ли у вас какая то цель или нет? Если интерес у вас чисто академический - то исключить строку можно, но работать будет медленно, нестабильно, и вообще так нормальные люди не делают. Можете прочитать это - http://ru2.php.net/manual/en/regexp.reference.assertions.php

    Если же задача реальна, то показывайте ее

    Символ ^ внутри [] исключает не один символ, а набор символов, и это вполне ожидаемая реакция, читайте документацию
     
    _________________________
  2. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Gifts
    спасибо за помощь, но не надо меня постоянно отправлять к документации
    я не из тех, кто создает тему с проблемой, как только эта проблема возникла

    я уже писал выше, что нагуглил конструкцию foo(?!bar), но использовать не получилось
    сейчас попробовал ещё раз, добился такого рабочего варианта:

    PHP:
    /(.*data (?!batch).*)/

    test data batch bold 
    test data botch bold 
    // достанет только это
    но есть ещё одно неудобство - перед (?!batch) обязательно должно быть слово
    /(test.*(?!batch).*)/ - уже не работает

    с этим можно что-то сделать?
     
  3. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    фильтрует ссылки от левых символов до /
    if (preg_match('/([:\/-\d\wа-я\.]+[\d\wа-я]{2,6}\/[^\s]{5,}?)/', $res)) {echo('добавлено<br>');} else {echo('левая ссылка');}


    http://portal.opera.com/11111111111@#$%1.php такую должен добавить
    http://p''':,^&#$.ope'ra.c'om/111111111111.php такую нет

    пропускает ковычки итд,в чем косяк подскажите плиз
     
  4. thomass

    thomass New Member

    Joined:
    4 Nov 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    [^\s]{5,}?

    видимо в этом, где ты тут кавычки фильтруешь
     
  5. sataite

    sataite New Member

    Joined:
    10 Dec 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    у меня вот вопрос(возможно не туда куда надо):
    есть например прег_матч_алл:
    PHP:
    preg_match_all("#<input.*name=\"(.*{$example}.*)\".*>#isU"$site$username);
    вопрос в этом фрагменте: name=\"(.*{$example}.*)\"
    а если человек писавший данный инпут использовал не такие кавычки "..", а такие '..', но я об этом не знаю, то что делать? если не сработает с этими кавычками, надо создавать второй preg_match_all и уже с нужными кавычками? или можно поступить альтернативно, более правильно?

    может быть можно написать для этого какое-то условие: символ(кавычка) может быть либо таким(") либо сяким('). Но как? я не могу найти никаких примеров для этого случая
     
    #1365 sataite, 20 Dec 2010
    Last edited: 20 Dec 2010
  6. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
  7. sataite

    sataite New Member

    Joined:
    10 Dec 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    спасибо, я уже как раз узнал). еще один вопрос:
    как написать: символ может быть, а может и не быть
    ?
    судя по всему вот так: [x,]
     
    #1367 sataite, 20 Dec 2010
    Last edited: 20 Dec 2010
  8. teenager

    teenager New Member

    Joined:
    30 Aug 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    помогите достать из строки все ссылки и закинуть их в масив.

    вот мой код
    PHP:
    $res file_get_contents('t.txt');
    $links preg_split('???'$res);
    не могу составить шаблон (((
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    teenager что вы понимаете под ссылками, пример текста и пример результата в студию
     
    _________________________
  10. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    как сделать так, чтобы например:
    PHP:
    <input name\"(.+)\".*>
    чтобы ".+" брало "всё", но только в том случае, если это "всё" не является определенным словом, которое я задам?
    или только таким способом можно это сделать?:
    PHP:
    for($i=0;$i<count($inputs);){
    preg_match("#<input name\"(.+)\".*>#isU"$inputs[$i], $name);
    if(
    $name!=="какое-то слово") break; else $i++;
    }
     
    #1370 stite, 21 Dec 2010
    Last edited: 23 Dec 2010
  11. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    preg_match("#http://.*?\..*?/.*?/#iU",$text,$matches);
    попробуй, нет времени тестить
     
    1 person likes this.
  12. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    Nightmarе, попробуй еще так:
    PHP:
    preg_match("#http://([^<]*/[^<]*)[/,][^<]*#isU",$text,$matches);
    тоже нет времени тестить :)

    п.с. кстати, мой вопрос еще актуален (смотреть выше^)
     
    #1372 stite, 23 Dec 2010
    Last edited: 23 Dec 2010
    1 person likes this.
  13. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    PHP:
    preg_match_all("#(http:\/\/.+?\/.+?\/)#is",$input,$matches);  
    print_r($matches);
     
    1 person likes this.
  14. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    stite
    мб
    PHP:
    <input name\"([^слово].+)\".*>
     
  15. stite

    stite New Member

    Joined:
    18 Dec 2010
    Messages:
    43
    Likes Received:
    4
    Reputations:
    9
    ухты, спасибо. это наверное как раз то что и надо.
    + еще нашел(кому вдруг понадобится):
    условия:
     
  16. -=Zhenek=-

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

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    PHP:
    RewriteRule ^register/+$ index.php?act=reg [L]
    RewriteRule ^rules/+$ index.php?act=rules [L]
    RewriteRule ^rememberpass/+$ index.php?act=rememberpass [L]
    RewriteRule ^add/+$ index.php?act=add [L]
    Есть такой .htaccess для ЧПУ. Но вот на поддомене вываливается 404 ошибка((( На основновном работает отлично((
    Что поменять? , чтоб работало?

    Вот ошибка появляющаяся :

    Тоесть он в пути еще и папку приписывает (atest) это папка поддомена. а запрашиваю так atest.site.ru Начинает ругаться там,где начинает ЧПУ использоваться

    UPD

    Оказалось что мешает фаил .htaccess лежащий выше((( я думал,что последкющий отменяет предыдущий

    PHP:
    DirectoryIndex index.php
    ErrorDocument 404 404.php

    RemoveHandler 
    .html
    AddType application
    /x-httpd-php .html
    AddHandler application
    /x-httpd-php .php .htm .html
    Вот его содержимое
    Может кто подскажет что в нем такого,что не работает ЧПУ? ( вроде ничего сверхЕстественного(
     
    #1376 -=Zhenek=-, 23 Dec 2010
    Last edited: 24 Dec 2010
  17. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите регулярку под
    Code:
    <item id="26812807" art_id="951" expire="0" type_id="5" bpslot="0" cost="0" amount="0" flags="624" color="#55625d" race="0" level="0" obj_type="8" slots="0" slot_num="0" aslot="0" set_id="0" img="art/951.gif" strength_cur="0" strength_max="0" ><item id="26812807" art_id="9351" expire="0" type_id="5" bpslot="0" cost="0" amount="0" flags="624" color="#55625d" race="0" level="0" obj_type="8" slots="0" slot_num="0" aslot="0" set_id="0" img="art/951.gif" strength_cur="0" strength_max="0" >
    Надо выпарсить значение item id="" где art_id=951.
    Если пробую то выдаеться вся строка не только значение item id
    Code:
                preg_match_all('~item id="(.*)" art_id="951"~',
                $contents,
                $out);
    
    
     
  18. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    $text '<item id="26812807" art_id="951" expire="0" type_id="5" bpslot="0" cost="0" amount="0" flags="624" color="#55625d" race="0" level="0" obj_type="8" slots="0" slot_num="0" aslot="0" set_id="0" img="art/951.gif" strength_cur="0" strength_max="0" ><item id="26812807" art_id="9351" expire="0" type_id="5" bpslot="0" cost="0" amount="0" flags="624" color="#55625d" race="0" level="0" obj_type="8" slots="0" slot_num="0" aslot="0" set_id="0" img="art/951.gif" strength_cur="0" strength_max="0" >';
    preg_match_all("#item id=\"(.*?)\" art_id=\"951\"#i",$text,$matches);
    echo 
    $matches[1][0];
    там просто $matches - массив массивов, там надо как с двумерным работать
     
  19. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Ищу регулярку для валидации md5 хэшей. '#^[0-9a-f]{32}$#i' не предлагать иначе в БД будет 0000000000000008f464da1f6727b5e
     
  20. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите как выпарсить данные между
    Code:
    <name><![CDATA[Техт]]></name>
    Если пробую так
    Code:
      preg_match_all('~<name><(.*)></name>~',
        $contents,
        $out);
    print_r($out);
    
    То получаеться
    Code:
    Array
    (
        [0] => Array
            (
                [0] => <name><![CDATA[Техт]]></name>
            )
    
        [1] => Array
            (
                [0] => ![CDATA[Техт]]
            )
    
    )
    
    А мне надо выпарсить только "Техт"

    Если пробую так то ничего не выходит
    Code:
      preg_match_all('~<name><![CDATA[(.*)]]></name>~',
        $contents,
        $out);
    print_r($out);
    
    
     
Thread Status:
Not open for further replies.