正则表达式仅捕获组中的最后一个项目


Regex is only capturing the last item in group

我以为我知道正则表达式,但我无法解决这个问题。

试图从中得到 56 分。

$s = '<a href="../paye/56.html">';

使用以下正则表达式 ( PHP - preg_match )

preg_match('/href="(.*('d+)'.html)"/',$s,$m);

但它只给了我 6

[
 0 => 'href="../paye/56.html"',
 1 => '../paye/56.html',
 2 => '6' // Need this to be 56
]
正则表达式

101 正则表达式

重复的捕获组将仅捕获最后一个迭代。放 围绕重复组捕获组以捕获所有迭代 或者,如果您对 数据

但是,我所有试图在捕获周围建立一个捕获小组的尝试都没有产生任何影响。

  1. ('d)+匹配一位数字并将其放入捕获组中,则+量词将匹配任何数字,但不会捕获它。要捕获所有数字,请在捕获组内移动+量词。
  2. 通过在末尾使用?使第一部分.*不贪婪。

您不需要完整字符串两边的括号。仅捕获 URL 中的最后一部分。

href=.*?('d+)'.html
       ^   ^

并访问第一个捕获的组。

法典:

$re = "/href=.*?(''d)+''.html/"; 
$str = "'$s = '<a href='"../paye/56.html'">';"; 
preg_match($re, $str, $matches);