Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: RegExp
Войти
Регистрация
Восстановить пароль
 
ИмяПользователя
18 / 18 / 13
Регистрация: 02.04.2015
Сообщений: 199
#1

Preg_replace_callback и argument 2, to be a valid callback - PHP

20.02.2018, 17:57. Просмотров 291. Ответов 1
Метки нет (Все метки)

Добрый день.
Скажу сразу: регулярки только вообще "открыл книгу" и, естественно, запутался...
Есть реальная задача, в которой кроме всего прочего "экранируются" кавычки такой вот строкой:
PHP
1
return preg_replace('/"(.+?)"/e', '$this->quote_identifier("$1")', $value);
с переходом на php 7 '/е' нужно заменить на "сопоставимый" вызов preg_replace_callback
Читанул, подумал, попробовал "в лоб":
PHP
1
return preg_replace_callback('/"(.+?)"/', '$this->quote_identifier("$1")', $value);
Получил ошибку "второй аргумент должен давать валидный callback" - погуглил...
На одном из форумов нашёл, что видимость метода в калбеке должна быть public, иначе не пройдёт - перепроверил, метод и так public.
Попытался дальше "покопаться" и разобраться самому, но... плюнул, переписал эту строку на вот такую вот наколенку:
PHP
1
return preg_replace_callback('/"(.+?)"/', 'error_log(print_r($1, true))', $value);
- Хотел глянуть что вообще там есть и может заменить непонятную мне регулярку на что-то более приземленное типа "str_replace", однако - не тут-то было, ошибка валидности калбека второго аргумента сидит и тут! ((

Прошу помощи, в о первых, правильно ли я понял "маску", вот это:
Bash
1
'/"(.+?)"/'
Следует читать как "любой 1 символ и более между двойными кавычками"?
Т.е. для абстрактной строки, вроде:
PHP
1
$str = 'qwerty "текст в кавычках" asdfgh';
в $1 попадёт именно 'текст в кавычках' - без обрамляющих кавычек (потому как скобки кармана находятся между кавычками)... ?

Почему в примерах к preg_replace_callback, во втором аргументе идет "вызов без параметров"? Я попробовал написать свою строку в таком виде:
PHP
1
return preg_replace_callback('/"(.+?)"/', 'error_log', $value);
И действительно - в логе появилась ошибка о том, что аргументом для error_log должна быть строка, а передается массив... т.е. написав error_log($1) - я допускаю синтаксическую ошибку и аргумент в функцию калбека нужно передавать неявно??!

Дайте пож., "красивое" человеко-понятное пояснение (ссылку на хорошую статью для новичков), где уточнили бы этот момент с синтаксисом, потому как всё, что я нахожу, останавливается больше на самом регулярном выражении, а не на грамотном использовании второго аргумента для калбека...

Спасибо! )

Добавлено через 32 минуты
Такс, вроде бы сработала вот такая вот конструкция:
PHP
1
return preg_replace_callback('/"(.+?)"/', function($m) { return $this->quote_identifier($m[1]); }, $value);
Но вопроса она не сняла:
- Во первых, я совсем не уверен, что эта конструкция сработала так, как и должна была;
- Во вторых - как правильно передавать аргументы в функцию калбека, не используя анонимных функций?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2018, 17:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Preg_replace_callback и argument 2, to be a valid callback (PHP):

Использование методов объектов в качестве callback-функции в preg_replace_callback
Приветствую, уважаемые. Ситуация: 0. есть class 1. получаем текст из БД...

supplied argument is not a valid Image resource in
денвер пишет : Warning: imagecreatetruecolor() : Invalid image dimensions in...

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
привет помогите разобраться с этим <ссылка удалена - нарушение правил> ...

Preg_replace_callback
Привет. Делаю редактирование табличных данных на аяксе. Нужно обезвредить...

Preg_replace и preg_replace_callback
нашел тут в закромах бекап и хотел развернуть на денвере, а тут ошибка, чт...

Использование функции preg_replace_callback()
Утро доброе, подскажите пожалуйста, хочу заменить preg_replace на...

1
Jewbacabra
Эксперт PHP
3093 / 2680 / 1226
Регистрация: 24.04.2014
Сообщений: 8,204
24.02.2018, 19:25 #2
https://secure.php.net/manual/ru/language.types.callable.php
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2018, 19:25
Привет! Вот еще темы с решениями:

preg_replace_callback и русский текст
нужно переделать текст: "ПРИМЕР больших и МАЛЕНЬКИХ букв" в текст: ...

Ошибка: Warning: preg_replace_callback(): Requires argument...
<br /> <b>Warning</b>: preg_replace_callback(): Requires argument 2,...

Invalid postback or callback argument
Сайт 2-й год стоит и все нормально, в последние пару месяцев стали появляться...

mysql_fetch_array(): supplied argument is not a valid MySQL
Есть файл messages.php которий должен вывести все сообщения юзера ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru