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

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

Thread Status:
Not open for further replies.
  1. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Имеется строка такого типа:
    Code:
    ":"http:\/\/cs11144.vkontakte.ru\/u50**1914\/-6\/z_ba**ad66.jpg"
    
    Как, с помощью preg_replace получить нормальную ссылку? Как бы я ни старался, он ":" и " представляет все время по разному, то в виде quot; , то &;:&; , то в обычном виде ":" .
     
  2. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Это случайно не кусок данных в формате JSON? json_decode() в помощь тогда.
     
  3. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Вряд ли, но попробовал - выводит пустую строку.
     
  4. sl1k

    sl1k Member

    Joined:
    31 Jul 2009
    Messages:
    106
    Likes Received:
    26
    Reputations:
    5
    есть текст вида
    PHP:
    ..............
    <
    script type="text/javascript">
    %%%%%
    </script>
    ...............
    как спарсить на php строку %%%%% (тоесть тело js скрипта)
    помоги пожалуйста , просто с регулярками никогда не работал, а тут срочно пришлось
     
  5. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    sl1k
    preg_match('#<script type="text/javascript">(.*?)</script>#s', $str, $match);
    print_r($match);
     
    #1645 Skofield, 8 Dec 2011
    Last edited: 8 Dec 2011
    1 person likes this.
  6. Vici

    Vici Banned

    Joined:
    1 Dec 2011
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    как в htaccess сделать вывод файла "t.txt" (корень сайта) по любому из адрессов "t(тут любые цифры в разном количестве).t". причем требуется всегда ответ от сервера 200
     
  7. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Code:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule ^t([0-9]+).t/?$ t.txt [L,QSA]
     
  8. artygrand

    artygrand New Member

    Joined:
    13 Jan 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    можно как нибудь в одно правило записать?
    Code:
    RewriteRule ^([a-zA-Z0-9_/]+)$ index.php?p=$1
    RewriteRule ^([a-zA-Z0-9_/]+)-([0-9]*)?$ index.php?p=$1&skip=$2
     
  9. -=Zhenek=-

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

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    if (!preg_match('#[0-9]{2}\s[0-9]{7}#',$seria[$i])) {echo "0";}else{echo "1";}

    Нужно чтоб строка $seria[$i] обязательно была формата 11 1112233 то есть 2 первые цифры пробел и 7 идущих дальше.

    В чем тут: [0-9]{2}\s[0-9]{7} ошибка? регулярка чуть ли не все подряд одобряет
     
  10. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    -=Zhenek=-
    #^[0-9]{2}\s[0-9]{7}$#
     
    1 person likes this.
  11. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Ограничители начала и конца строки помогут, но \s пропустит как пробел так и табуляцию, если не критично, можно оставить так.

    Как вариант если нужно именно пробел а не табуляцию, тогда так:
    Code:
    #^\d{2} \d{7}$#
     
    1 person likes this.
  12. -=Zhenek=-

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

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    preg_match("#[а-я А-Я]#"

    Как сюда добавить тире? только тире... Чтоб из разрешенных было русские буквы,тире и пробел?

    и почему

    preg_match("#[а-я А-Я]#",$text);

    Пропускает текст вида: Иванов Иван Ivanivich хотя четко указано только русские и пробел(

    #^[а-я А-Я]{2,3}+$# так пробовал... 2 или 3 блока с русскими буквами и пробел.. Вообще ничего не пропускает
    preg_match("|^[-а-я]+$|i",strtolower($rus_fio[$i])) так тоже( хотя привожу в нижнии регистр и в нем сравниваю..
     
    #1652 -=Zhenek=-, 24 Dec 2011
    Last edited: 24 Dec 2011
  13. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    -=Zhenek=-, заюзайте 3-й параметр функции preg_match() и поймете, почему пропускает. А также вспомните о существовании символов ^ и $.
     
  14. -=Zhenek=-

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

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    #^([а-яА-ЯчЧ]{2,20})\s([а-яА-ЯчЧ]{2,20})\s([а-я А-ЯчЧ]{2,20})$#

    Вот. Иванов Иван Иванович пропускает
    а Петров Петр Петрович нет

    п.с буквы ч там добавлены т.к он говорил что их нет в диапазоне а-я

    Ну а добавление 3 параметра не особо помогает..
    если регулярка правильная он заполняется..
    если нет то пустой.
     
  15. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Че за бред, кто это говорит?
     
  16. -=Zhenek=-

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

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Логика.. Если в слове есть буква ч регулярка ее не пропускает. удаляем все работает.
    Искал проблему методом научного тыка. Отчество Иванович не пропускал пока букву "ч" не удалил. удалил, сработало. заменил ее на произвольные любые другие типа Ивановиапва пропустило.

    Поэтому я и в замешательстве.
     
  17. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- используйте вещи правильно. Если входная строка в кодировке utf-8 и содержит символы c кодом >128 необходимо использовать модификатор u:

    PHP:
    <?PHP

    $in_arr 
    = array('Иванов Иван Иванович''Петров Петр Петрович');


    foreach (
    $in_arr as $in)
        if (
    preg_match('#^([а-яА-Я]{2,20})\s([а-яА-Я]{2,20})\s([а-яА-Я]{2,20})$#u'$in$out))
            
    var_dump($out);
    Того же эффекта можно добиться, если использовать однобайтовые кодировки, но так лучше НЕ ДЕЛАТЬ

    PHP:
    <?PHP

    $in_arr 
    = array('Иванов Иван Иванович''Петров Петр Петрович');



    foreach (
    $in_arr as $in)
    {
        
    $in iconv('utf-8''cp1251'$in);
        if (
    preg_match(iconv('utf-8''cp1251''#^([а-яА-Я]{2,20})\s([а-яА-Я]{2,20})\s([а-яА-Я]{2,20})$#'), $in$out))
            
    var_dump($out);
    }
    И просто рекомендация - если не понимаете почему что-то происходит, выясняйте причину, а не городите костыли на пустом месте
     
    _________________________
    #1657 Gifts, 25 Dec 2011
    Last edited: 25 Dec 2011
    1 person likes this.
  18. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Есть строка вида
    PHP:
    <img src='capcha.php?s=тут_сессия_которую_вырезает_античат'
    как это спарсить (сессию)? Пишу регулярку, но дает странный еррор

    preg_match("/(<img src=\'capcha.php?s\[S+]\'/"

    Compilation failed: missing ) at offset 32 в строке где регулярка.
     
  19. AnGeI

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

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Flisk, экранируйте скобки.
     
  20. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Спасибо, сделал так
    , но почему-то ничего не парсит ничего.
     
Thread Status:
Not open for further replies.