Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件名和数字上的PHP Regexp-preg\u replace\u回调_Php_Regex - Fatal编程技术网

文件名和数字上的PHP Regexp-preg\u replace\u回调

文件名和数字上的PHP Regexp-preg\u replace\u回调,php,regex,Php,Regex,如何捕获和归档文件名 我曾尝试在PHP中使用preg\u replace\u callback,但我不知道如何正确使用 function upcount_name_callback($matches) { //var_export($matches); $index = isset($matches[3]) ? intval($matches[3]) + 1 : 1; return '_' . $index; } $filename1 = 'news.jpg'; echo p

如何捕获和归档文件名

我曾尝试在PHP中使用preg\u replace\u callback,但我不知道如何正确使用

function upcount_name_callback($matches) {
   //var_export($matches);
   $index = isset($matches[3]) ? intval($matches[3]) + 1 : 1;
   return '_' . $index;
}

$filename1 = 'news.jpg';
echo preg_replace_callback('/^(([^.]*?)(?:_([0-9]*))?)(?:\.|$)/', 'upcount_name_callback', $filename1, 1);

$filename2 = 'aw_news_2.png';
echo preg_replace_callback('/^(([^.]*?)(?:_([0-9]*))?)(?:\.|$)/', 'upcount_name_callback', $filename2, 1);
输出(错误):

array (
  0 => 'news.',
  1 => 'news',
  2 => 'news',
  3 => '1',
)

_1jpg       <= wrong - filename1
news_1       <= filename1
数组(
0=>“新闻”,
1=>“新闻”,
2=>“新闻”,
3 => '1',
)
_1jpg“aw_新闻2”,
1=>“aw_新闻2”,
2=>aw_新闻,
3 => '2',
)
_3png您也可以使用:


请尝试此返回$matches[2]。\u0$索引‘’;这已经尝试过了,但它是错误的,例如,news_1jpgIt成功了。非常感谢你的帮助!我会再见你的,好吧,但比另一个答案要好。谢谢你的回答。
news_1       <= filename1
aw_news_3      <= filename2
function upcount_name_callback($matches) {
    $index = isset($matches[3]) ? intval($matches[3]) + 1 : 1;
    return $matches[2] . '_' . $index;
}

$filename1 = 'news.jpg';
echo preg_replace_callback('/^(([^.]*?)(?:_([0-9]*))?)(?:(\..*)|$)/', 'upcount_name_callback', $filename1);

$filename2 = 'aw_news_2.png';
echo preg_replace_callback('/^(([^.]*?)(?:_([0-9]*))?)(?:(\..*)|$)/', 'upcount_name_callback', $filename2);
function my_replace_callback ($matches)
{
    $index = isset ($matches [1]) ? $matches [1] + 1 : 1;
    return "_$index";
}

$file = 'news.jpg';
$file = preg_replace_callback ('/(?:_([0-9]+))?\..*$/', 'my_replace_callback', $file);
print ($file);

$file = 'aw_news.jpg';
$file = preg_replace_callback ('/(?:_([0-9]+))?\..*$/', 'my_replace_callback', $file);
print ($file);

$file = 'news_4.jpg';
$file = preg_replace_callback ('/(?:_([0-9]+))?\..*$/', 'my_replace_callback', $file);
print ($file);

$file = 'aw_news_5.jpg';
$file = preg_replace_callback ('/(?:_([0-9]+))?\..*$/', 'my_replace_callback', $file);
print ($file);
pattern('^(([^.]*?)(?:_([0-9]*))?)(?:\.|$)')
     ->replace('name.jpg')
     ->first()
     ->callback(function (Match $m) {
          $index = $m->matched(3) ? $m->group(3)->toInt() + 1 : 1;
          return '_' . $index;
     }