[英]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试图帮助
重复的捕获组将仅捕获最后一次迭代。 将捕获组放在重复的组周围以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组
但是,我为围绕该捕获而成立一个捕获组的所有尝试都没有任何改变。
(\\d)+
将匹配一个数字并将其放入捕获组, +
量词将匹配任何数字,但不会捕获它。 要捕获所有数字,请在捕获组内移动+
量词。 ?
使第一部分.*
不贪心?
在末尾。 您不需要在完整字符串周围加上括号。 仅捕获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.