正则表达式不起作用

时间:2011-02-10 11:46:18

标签: php regex html-parsing

问候每个人

我有这个正则表达式如下:

$thread_views_exp = '~<td class="alt1" align="center">.*</td> <td class="alt2" align="center">(.*)</td> </tr>~isU';

这样做的目的是获取此示例主题网址http://www.swalif.net/softs/swalif45的所有“视图”(左起第一列)。除了第一个值,一切正常。

示例输出:

Array
(
    [0] => 12 528
    [1] => 2,732
    [2] => 506
    [3] => 73
    [4] => 83
    [5] => 245
    [6] => 100
    [7] => 201
    [8] => 55
    [9] => 55
    [10] => 37
    [11] => 349
    [12] => 123
    [13] => 75
    [14] => 173
    [15] => 260
    [16] => 101
    [17] => 660
    [18] => 158
    [19] => 66
    [20] => 177
    [21] => 165
    [22] => 228
    [23] => 812
    [24] => 347
    [25] => 197
    [26] => 348
    [27] => 263
    [28] => 176
    [29] => 315
    [30] => 173
    [31] => 273
    [32] => 199
)

感谢您的协助。 姆兰

2 个答案:

答案 0 :(得分:4)

似乎是表格细胞贪婪的情况。我的测试也给了我一个无关的<td>。但是有一种简单的方法可以使正则表达式更加严格:

$rx = '~<td class="alt1" align="center">.*</td> <td class="alt2" align="center">([\d,]+)</td> </tr>~isU';

此处使用的\d+代替.*?仅返回完全匹配。之前的.*吃得太多了。

一般提示:您可能希望使用[^<>]*来安全地匹配html括号之间的文本内容,而不是.*。也许应用\s+而不仅仅是空格。

答案 1 :(得分:0)

也许试试

~<td class="alt2" [^\<\>]+?>([\d,]+)</td>~isU

这假定您感兴趣的td始终为class="alt2"

并且可能没有必要逃脱LT和GT的迹象,即......

~<td class="alt2" [^<>]+?>([\d,]+)</td>~isU