我有一个像'Doc 16_1.pdf'这样的文件名,我必须检查该名称是否与preg_match一致,如果匹配则下一个号码将是'Doc 16_2.pdf'
'/(?:(?: \(_[\d]+\))?(\.[^.]+))?$/'
$ name ='Doc 16';
我正在检查
return preg_replace_callback(
/(?:(?: \(_[\d]+\))?(\.[^.]+))?$/,
array($this, 'upcount_name_callback'),
$name,
1
);
像
一样增量protected function upcount_name_callback($matches) {
print_r($matches);
$index = isset($matches[1]) ? ((int)$matches[1]) + 1 : 1;
$ext = isset($matches[2]) ? $matches[2] : '';
$nm = '_'.$index.$ext;
return $nm;
}
我已经尝试过上面的preg_match,但它没有返回匹配的结果。
你能帮帮我吗,先谢谢你。
答案 0 :(得分:0)
以此为出发点。
<?php
if (preg_match("/^(.*)_(\d*)\.pdf$/", $filename, $output)) {
$docname = $output[1];
$num = (int)$output[2];
}
?>
答案 1 :(得分:0)
您可以使用
增加数字preg_replace_callback('/_(\d+)(\.[^.]+)?$/', function($m) {
return "_" . ($m[1]+1) . $m[2];
},$name);
<强>详情
_
- 下划线(\d+)
- 第1组($m[1]
):一个或多个数字(\.[^.]+)?
- 可选组2($m[2]
):一个点和除.
以外的一个或多个字符$
- 字符串结束。请参阅PHP demo:
$name = 'Doc 16_1.pdf';
echo preg_replace_callback('/_(\d+)(\.[^.]+)?$/', function($m) {
return "_" . ($m[1]+1) . $m[2];
},$name);