问候每个人
我有这个正则表达式如下:
$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
)
感谢您的协助。 姆兰
答案 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