2013-02-19 5 views
0

У меня есть следующие PHP регулярное выражение:PHP Regex, только получая обратно частичные результаты

@<tr[\s\S]*?<a class="b1"[\s\S]*?<em[^>]*>([^<]*)[\s\S]*?stars_small_([0-9].[0-9])@ 

Что я использую на этом сайте:

Gamespy

Я вернусь эти данные:

[1] => Array 
     (
      [0] => AC/DC Live: Rock Band Track Pack 
      [1] => Ace Combat 6: Fires of Liberation 
      [2] => All-Pro Football 2K8 
      [3] => Alone in the Dark 
      [4] => Armored Core 4 
      [5] => Army of Two 
      [6] => Army of Two: The 40th Day 
     ) 

    [2] => Array 
     (
      [0] => 3.5 
      [1] => 2.5 
      [2] => 3.5 
      [3] => 3.5 
      [4] => 2.5 
      [5] => 3.5 
      [6] => 3.5 
     ) 

Это то, что я ищу, однако, похоже, я не возвращаю все данные. Я должен получить следующие титулы с десятками. Но по какой-то причине я получаю только некоторые из них.

AC/DC Live: Rock Band Track Pack  
Ace Combat 6: Fires of Liberation  
Afro Samurai   
Alan Wake  
Aliens vs. Predator 
All-Pro Football 2K8  
Alone in the Dark 
Amped 3  
Armored Core 4 
Army of Two 
Army of Two: The 40th Day 
Assassin's Creed  
Assassin's Creed II 
Assassin's Creed: Brotherhood  
Avatar: The Game 

Я проверил мое регулярное выражение здесь:

http://www.solmetra.com/scripts/regex/index.php

Используя этот HTML:

http://justpaste.it/20u5

Любая помощь, объясняя, почему я только получаю назад некоторые результатов wou ld будем очень благодарны. Спасибо

+1

Вы должны использовать анализатор html для разбора html. – jeroen

+0

Да, я понял, что, возможно, есть более простые способы сделать это. Но я хотел потратить некоторое время на изучение регулярного выражения. Какой парсер вы бы порекомендовали? –

+0

Вы можете использовать DOMDocument, если он установлен, это часть самого php. – jeroen

ответ

1

Измените подкатегорию stars_small_([0-9].[0-9]) на stars_small_([0-9](?:\.[0-9])?), так как некоторые из URL-адресов имеют только одну цифру в атрибуте SRC тега IMG.

+0

А .. Это имеет смысл. Спасибо за помощь. –

+0

Если вы не возражаете, можете ли вы мне объяснить, что?: \ Does? –

+0

@japanFour. '?:' Просто делает группу в скобках без захвата. \ Escapes '.' поэтому интерпретируется как литерал' .', а не метасимвол подстановки. «?», Следующая за скобкой, делает его необязательным, то есть может быть необязательно «.» И другая цифра. – MikeM