求助修正preg_match正则:提取字符串最后连字符后的数字
修正preg_match提取目标数字的方案
嘿,你的问题很明确——要从Cat-115/Ads-733-49里提取Ads-733-后面的最后一段数字49对吧?你原来的正则/Ads-\K\d+/会匹配到Ads-后面的第一个数字序列(也就是733),这不符合你的需求,我们来调整一下:
方法一:使用捕获组
这种方式直观易懂,通过括号捕获我们需要的目标数字:
$destination = "Cat-115/Ads-733-49"; preg_match('/Ads-\d+-(\d+)$/', $destination, $m); $result = $m[1]; // 结果是49
正则解释:
Ads-:精准匹配字符串里的Ads-\d+:匹配1个或多个数字(对应这里的733)-:匹配连字符(\d+):捕获我们需要的目标数字$:确保匹配到字符串末尾,避免后续有其他内容干扰
方法二:使用\K忽略前置内容
如果你习惯用\K来简化结果提取,可以调整正则,让它跳过前面的Ads-xxx-部分:
$destination = "Cat-115/Ads-733-49"; preg_match('/Ads-\d+-\K\d+$/', $destination, $m); $result = $m[0]; // 结果是49
正则解释:
Ads-\d+-:匹配Ads-加上数字和连字符的部分\K:重置匹配起点,前面的内容不会被包含在最终匹配结果里\d+$:匹配到字符串末尾的数字序列,也就是我们要的49
如果你的字符串结构固定(最后一段总是数字),也可以用更简洁的正则/-(\d+)$/,直接匹配最后一个连字符后的数字,但前面的精准匹配更安全,能避免其他连字符的干扰哦~
内容的提问来源于stack exchange,提问作者Bijan Zand
相关产品推荐
相关产品推荐

