php preg_match 获取两个字符串之间的数字

sms*_*sms 4 php regex preg-match

嗨,我开始学习 php regex 并遇到以下问题:我需要提取 $string 中的数字。我使用的正则表达式返回“NULL”。

$string = 'Clasificación</a> (2194)  </li>';
$regex = '/Clasificación</a>((.*?))</li>/';
preg_match($regex , $string, $match);
var_dump($match);
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Ama*_*ali 6

您的正则表达式存在三个问题:

  • 你没有逃避正斜杠。您使用正斜杠作为分隔符,因此如果要将其用作表达式中的文字字符,则需要对其进行转义
  • ((.*?))不会做你认为它会做的事情。它创建了两个捕获组——一个嵌套在另一个中。我假设,您正在尝试捕获括号内的内容。为此,您需要对()字符进行转义。表达式将变为:\((.*?)\)
  • 您的表达式不处理空格。在您提供的字符串</a>中,数字 -- 和开头之间有空格</a> (2194)。要忽略空格并仅捕获数字,您需要使用\s(匹配任何空格字符)。为此,您需要编写\s*\((.*?)\)\s*.

修复上述所有错误后的最终正则表达式将如下所示:

$regex = '~Clasificación</a>\s*\((.*?)\)\s*</li>~';
Run Code Online (Sandbox Code Playgroud)

完整代码:

$string = 'Clasificación</a> (2194)  </li>';
$regex = '~Clasificación</a>\s*\((.*?)\)\s*</li>~';
preg_match($regex , $string, $match);
var_dump($match);
Run Code Online (Sandbox Code Playgroud)

输出:

array(2) {
  [0]=>
  string(32) "Clasificación (2194)  "
  [1]=>
  string(4) "2194"
}
Run Code Online (Sandbox Code Playgroud)

演示。