繁体   English   中英

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

[英]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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM