Cześć,
Potrzebuję podmieniać znaki w masce na konkretne wartości. Niestety moje wyrażenie regularne nie działa jak należy bo zamiast wychwytywać każdy rodzaj znaku $,@,... osobno to wybiera je wszystkie razem, dopóki nie znajdzie się znak rozdzielający nie występujący w wyrażeniu. W załączonym przykładzie poniżej do funkcji replacef jest podstawiane $$@@ zamiast najpierw $$ a później @@. Jak zbudować wyrażenie regularne aby każdy człon maski był analizowany osobno ? Może jest jakieś inne, lepsze rozwiązanie?
function replacef($matches)
{
$type = substr($matches[1], 1,1);
$len = strlen($matches[1]);
$timestamp = strtotime('2017-05-20');
switch ($type)
{
case '$': return substr(date('Y',$timestamp),-$len);
case '@': return substr(date('m',$timestamp),-$len);
case '#': return sprintf("%0{$len}u",1);
}
}
$maska = '$$@@/######';
print preg_replace_callback('/([\&\$\@\%\#]+)/','replacef',$maska)."\n";
ostatecznie wynik jest taki:
2017/000001
a ja oczekuję:
1705/000001