29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 314
1

Preg_replace_callback и argument 2, to be a valid callback

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

Author24 — интернет-сервис помощи студентам
Добрый день.
Скажу сразу: регулярки только вообще "открыл книгу" и, естественно, запутался...
Есть реальная задача, в которой кроме всего прочего "экранируются" кавычки такой вот строкой:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2018, 17:57
Ответы с готовыми решениями:

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

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
привет помогите разобраться с этим <ссылка удалена - нарушение правил> скачал установил все...

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

1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.02.2018, 19:25 2
https://secure.php.net/manual/... llable.php
1
24.02.2018, 19:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2018, 19:25
Помогаю со студенческими работами здесь

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

Warning: call_user_func_array() expects parameter 1 to be a valid callback
Всем привет выручайте знатоки)), залил сайт на хостинг (Wordpress) все вроде было норм, но после...

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

mysql_num_rows(): supplied argument is not a valid MySQL
при выполнении кода возникает ошибка и не выводятся данные и бд <? /* Некоторые переменные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru