preg_match搜索字符串问题

时间:2016-12-21 15:45:16

标签: php

我有以下代码:

$base_url = "http://www.WWWW.com/npcs/";
$url = $base_url.$npc;
$page = file_get_contents($url);
preg_match('/class="db-left">Leveld+/', $page, $level_match);

这是我需要查找的原始搜索,尝试搜索字段的各种变体,似乎无法找到一个有效的,所有这些都使$ level_match为空。 在Level之后应该有一些数字,比如“15 22”之前的空格。 我需要脚本只返回那些数字。不能仅使用Level作为搜索,因为它将获得超过1的结果。

2 个答案:

答案 0 :(得分:0)

您没有正确使用\d来表示数字。它需要反斜杠。 除非你满足“等级”和数字之间的空白,否则你也不会匹配“等级27”:

preg_match('/class="db-left">Level\s+(\d+)/', $page, $level_match);

这适用于:

$page = '<dd class="db-left">Level 27 (Rare)</dd>';
preg_match('/class="db-left">Level\s+(\d+)/', $page, $level_match);  
var_dump($level_match);

我在问题的\d附近添加了括号,因为您稍微更改了问题,只询问提取的数字:

array(2) {
  [0] =>
  string(24) "class="db-left">Level 27"
  [1] =>
  string(2) "27"
}

答案 1 :(得分:0)

这将为您提取您的号码。 $正在该行的开头搜索您的匹配,这对于长HTML页面来说效果不佳。您还需要在d +中添加\,告诉您要搜索数字。然后将\d+包裹在( )中以将匹配与其他匹配分开。

preg_match('/class="db-left">Level (\d+)/', $page, $level_match);

var_dump($level_match[1])