2013-02-19 47 views
0

我有以下PHP的正则表达式:PHP正则表达式,只找回部分结果

@<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

任何解释为什么我只找回一些帮助的结果无ld将不胜感激。谢谢

+1

你应该使用一个html解析器来解析html。 – jeroen 2013-02-19 20:43:01

+0

是的,我认为有可能更简单的方法来做到这一点。但我想花一些时间学习正则表达式。你会推荐哪个解析器? – 2013-02-19 20:48:18

+0

如果安装了DOMDocument,则可以使用它,它是PHP本身的一部分。 – jeroen 2013-02-19 20:51:51

回答

1

将子模式stars_small_([0-9].[0-9])更改为stars_small_([0-9](?:\.[0-9])?),因为某些网址在IMG标记的SRC属性中只有一个数字。

+0

啊..这是有道理的。谢谢您的帮助。 – 2013-02-19 20:46:42

+0

如果你不介意,你可以向我解释什么?:\是吗? – 2013-02-19 20:48:47

+0

@japanFour。 '?:'只是使括号内的组无法捕获。 \逃避'.',因此被解释为文字'.'而不是通配符元字符。括号内的后面的'?'表示它是可选的,也就是说可以有一个'.'和另一个数字。 – MikeM 2013-02-19 20:52:52