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

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

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

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

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    парни нужно спарсит русские имена с одного сайта но кодировка utf-8 и не могу не как(

    вот регулярка
    ([0-9a-z-A-ZА-Яа-я `~!^&*()_=?№+|>\@\$\#\%<]{0,30})
    парсит все имена анг и с закарлючками а вот русские не парсит
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    mazaxaka модификатор u
     
    _________________________
  3. mazaxaka

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

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    /([0-9a-z-A-ZА-Яа-я `~!^&*()_=?№+|>\@\$\#\%<]{0,30})/u;
    так чтоли?
    скрипт ругается на етот модификатор
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    mazaxaka яп и пример кода, где вы это используете в студию
     
    _________________________
  5. mazaxaka

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

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    что такое "яп"?

    да с кодов все впорядке все нормально парсит кроми русский ников
    Code:
    my ($user) = $resp =~ /<span class="subhead">([0-9a-zA-Zа-яА-я- `~!^&*()_=?№+|>\@\$\#\%<]{0,30})<\/span>/u; 
     
  6. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    ЯП - язык программирования.
    Модификатор u преобразует паттерн в utf-8, если с ним не работает попробуйте контент конвертировать в win1251 и использовать регулярку без данного модификатора.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    mazaxaka модификатор u является расширением php, несовместимым с регулярками перла. Как вариант попробуйте перед регуляркой указать
    Code:
    use utf8;
    my ($user) = $resp =~ /<span class="subhead">([0-9a-zA-Zа-яА-я- `~!^&*()_=?№+|>\@\$\#\%<]{0,30})<\/span>/u;
    Могу заблуждаться, вообще читайте вот это: http://xpoint.ru/know-how/Perl/PodderzhkaUnicode#UseUtf8 Ну или ждите перл погромиста
     
    _________________________
  8. mazaxaka

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

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    не допонял. в смысле все страницу из utf-8 в win1251?

    сдесь получаю страницу
    Code:
    $resp = $ua->get("http://forum.xakep.ru/showprofile.aspx?memid=$xx")->as_string;
    decode::_utf8_off($resp );
    return $resp ;

    так примерно или опять оишбаюсь?
     
  9. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Правильный метод:
    1. Сохраняем код в utf-8 и указываем это с помощью "use utf8;"
    2. Перед обработкой декодируем все данные, приходящие извне.
    Code:
    use utf8;
    use Encode;
    
    use feature 'say';
    use LWP::UserAgent;
    
    my $encoded = LWP::UserAgent->new->get('http://www.baidu.com/')->content;
    my $decoded = decode('euc-cn', $encoded);
    
    say $decoded =~ /百度/;
    
    Что касается LWP::UserAgent, нужно пользоваться методом decoded_content:
    Code:
    use utf8;
    use Encode;
    
    use feature 'say';
    use LWP::UserAgent;
    
    my $decoded =
      LWP::UserAgent->new->get("http://www.baidu.com/")->decoded_content;
    
    say $decoded =~ /百度/;
    
     
  10. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    135
    Reputations:
    4
    все просто. всего то
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php?url=$0 [QSA,L]
     
  11. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    135
    Reputations:
    4
    помогите передалать
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php?url=$0 [QSA,L]
    под такие условия.
    если запрашивается файл с расширенеим pdf или css или файл /admin/index.php то перенаправляем на них иначе на index.php который в корне
     
  12. XJIOP

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

    Joined:
    23 Mar 2005
    Messages:
    40
    Likes Received:
    0
    Reputations:
    0
    помогите вытащить id из строки при помощи preg_match или preg_replace

    /test/test/test/bla-bla-bla-bla-1.html отсюда нужен номер 1, но проблема в том что номер может быть еще в тексте blabla, потому нужен именно тот который -1.html

    заранее спасибо!
     
  13. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Так подойдёт?
    PHP:
    $text '/test/test/1.html/test/bla-bla-bla-bla-25.html';

    if (
    preg_match_all("/[0-9]*.html/"$text$regs))
    {echo 
    str_replace('.html'''substr($textstrpos($text$regs[0][(count($regs[0])-1)])));}
     
    1 person likes this.
  14. XJIOP

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

    Joined:
    23 Mar 2005
    Messages:
    40
    Likes Received:
    0
    Reputations:
    0
    ага работает спасибо!

    но код громозкий получился, переделал на вот так:
    PHP:
    preg_match("/[0-9]*.html/"$_SERVER['REQUEST_URI'], $regs);
    echo 
    str_replace('.html'''$regs[0]);
     
  15. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Логично. Но тогда
    PHP:
    preg_match_all("/[0-9]*.html/"$_SERVER['REQUEST_URI'], $regs)
    echo 
    str_replace('.html'''$regs[0][count($regs)]);
    На всякий случай. Хотя, это уже паранойя ))
     
  16. XJIOP

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

    Joined:
    23 Mar 2005
    Messages:
    40
    Likes Received:
    0
    Reputations:
    0
    не понял что должно дать [count($regs)] зачем подсчитывать массив?

    конструкция сработала только так
    PHP:
    preg_match_all("/[0-9]*.html/"$_SERVER['REQUEST_URI'], $regs);
    echo (int) 
    str_replace('.html'''$regs[0][0]);
    с [count($regs)] вывело только точку :D
     
  17. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Сорри, не [count($regs)], а [count($regs[0])-1]

    Если вдруг встретится 2 раза 1.html, то id из последнего будет взят :)
     
  18. XJIOP

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

    Joined:
    23 Mar 2005
    Messages:
    40
    Likes Received:
    0
    Reputations:
    0
    ну да логично 1.html-1.html :)

    кстати может это можно через nginx выводить id??

    а то я тут собираю самодельный чпу на пхп, а в nginx rewrite выставил
    PHP:
    rewrite ^/(.*)(.html)$ /test_chpu2.php?id=$1 last;
     
    #1318 XJIOP, 2 Nov 2010
    Last edited: 2 Nov 2010
  19. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Какая самая короткая регулярка для проверки мыла на js ? Нужна именно короткая,а не куча наборов a-z... )
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Welemir зачем вам регулярка, которая ничего не проверяет?
    PHP:
    preg_match('~.+@.+\..+~'$email);
     
    _________________________
Thread Status:
Not open for further replies.