Preg_match и кириллица

Discussion in 'PHP' started by Seganapa, 24 Jul 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Всем добрый день!

    Есть такая строка:
    HTML:
    href="#eyJ0cCI6ImlzbGFuZCIsImlkIjoxMTQ2MjA3LCJpeCI6NjgxLCJpeSI6NzA2LCJyZXMiOiJTdyIsImxuayI6dHJ1ZSwid24iOiIifQ==" class="gp_island_link">Остров 1146207</a>
    
    Мне нужно спарсить "1146207"...

    Если бы не кириллица, проблем бы не было.

    Делаю так:
    PHP:
    var_dump (preg_match ('#island_link\"\>Остров(.+)<\/a>#ui'$html$a));
    Получаю:
    Compilation failed: invalid UTF-8 string
     
    #1 Seganapa, 24 Jul 2012
    Last edited: 24 Jul 2012
  2. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    PHP:
    <?php
    preg_match 
    ('#island_link\"\>(\d+)<\/a>#i''"gp_island_link">Остров 1146207</a>
    '
    $a);
    print_r ($a);
    ?>
    Возвращает пустой массив
     
  3. masolit

    masolit Member

    Joined:
    1 Dec 2010
    Messages:
    23
    Likes Received:
    20
    Reputations:
    0
    Code:
    <?php
    preg_match('@(\d+)@', '"gp_island_link">Остров 1146207</a>', $a);
    print_r ($a);
    
     
    #3 masolit, 24 Jul 2012
    Last edited: 24 Jul 2012
  4. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Seganapa для вопросов связанных с регулярными выражениями есть отдельная тема, будьте внимательны.
    PHP:
    preg_match ('#(\d+)<\/a>$#''"gp_island_link">Остров 1146207</a>'$a); 
     
  5. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Виноват! Исправлюсь!
    Так то работает, но если в коде часто встречается (\d+)<\/a>... А нужно выбрать именно между gp_island_link">Остров ........... </a>, как быть в таком случае?
     
  6. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    В таком случае, нужно уточнять, что приведенная строка, это не окончательный вариант. Ибо регулярные выражения пишутся индивидуально под каждую строку.
    PHP:
    preg_match('#class="gp_island_link">.*\s(\d+)<\/a>#'$html$a);
     
    #6 Skofield, 24 Jul 2012
    Last edited: 24 Jul 2012