我以为我知道正则表达式,但我无法解决这个问题。
试图从中获得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
]
Regex 101正在尝试帮助
重复捕获组仅捕获最后一次迭代。放 重复组周围的捕获组捕获所有迭代 如果您对此不感兴趣,请使用非捕获组 数据
但我所有尝试将捕获组放在捕获周围的尝试并没有什么不同。
答案 0 :(得分:1)
(\d)+
将匹配单个数字并将其放入捕获组,+
量词将匹配任何数字,但不会捕获它。要捕获所有数字,请移动捕获组内的+
量词。.*
使第一部分?
非贪婪。整个字符串周围不需要括号。仅捕获URL中的最后一部分。
href=.*?(\d+)\.html
^ ^
访问第一个捕获的组。
<强>代码:强>
$re = "/href=.*?(\\d)+\\.html/";
$str = "\$s = '<a href=\"../paye/56.html\">';";
preg_match($re, $str, $matches);