preg_replace_callback для замены даты внутри скобок

#php #regex

#php #регулярное выражение

Вопрос:

Я пытаюсь заменить дату внутри скобок некоторым текстом:

ADB (2010-11) (a) —-> ADB : newtext (a)

 $output = preg_replace_callback('#(([d{4}-d{2}][^)] ))#', function ($m) {
          
           return " : ". newtext ." ";
        }, $str);
 

Есть предложения?

Ответ №1:

Вам это не нужно preg_replace_callback , preg_replace вы можете достичь цели. Однако вам необходимо исправить ваше регулярное выражение. Все внутри [] должно быть списком символов, диапазонов, разделенных - s (например a-z , для символов ASCII между a и z (не в верхнем регистре)), или метасимволов (например d , для чисел). Скобки известны как классы символов, подробнее о них можно прочитать здесь https://www.regular-expressions.info/charclass.html .

Для того, что вы хотите, вы можете использовать:

 (d{4}-d{2})
 

и заменить на:

 : newtext
 

Как строка PHP:

 echo preg_replace('/(d{4}-d{2})/', ': newtext', 'ADB (2010-11) (a)');
 
  1. Демонстрация: https://3v4l.org/3YKWi
  2. Регулярное выражение101: https://regex101.com/r/zFwvHJ/1 /