[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Использование извлеченного RegExp в MySQL
kirh
Всем привет!
Простейшая задача. Надо, чтобы мой тэг вида @player(123) преобразовывался в строку вида
<a href='http://url/123'>NAME_OF_PLAYER</a>

где NAME_OF_PLAYER - надо извлечь из базы MySQL

Делаем преобразование:
$msg=preg_replace("!\@player\(([0-9]{1,})\)!", MyFunc("\\1"), $msg);

В MyFunc формируем искомую строку для замены.

Но проблема! MySQL не понимает полученный параметр (как ЧИСЛОВОЙ) никак. Простая строка формируется внутри функции на ура, но база ругается(( При приведении к числу - получается 0...

Вопрос: каким образом адаптировать передаваемый параметр для MySQL?
walerus
kirh
preg_match того что нужно и результат уже в preg_replace
kirh
Цитата (walerus @ 16.01.2017 - 17:54)
kirh
preg_match того что нужно и результат уже в preg_replace

Не понятно, чем поможет preg_match...
walerus
kirh
$string = '@player(123)';

echo "STRING IN - |$string|<br>\n";

preg_match( '~@player\((.*)\)~iUs', $string, $matches );

## $matches[1] - искомое 123

function MyFunc( $data ){
return $data . '+test_replace+' . $data;
}

$tmp_MyFunc = MyFunc( trim( $matches[1] ) );
$string = preg_replace("!\@player\(([0-9]{1,})\)!", $tmp_MyFunc, $string );
echo "STRING OUT - |$string|<br>\n";
STRING IN - |@player(123)|<br>
STRING OUT - |123+test_replace+123|<br>

так понятнее? или не то... ?
twin
Так проще
$string = '@player(123)';

echo "STRING IN - |$string|<br>\n";

$string = preg_replace_callback("!\@player\(([0-9]{1,})\)!",
function ($matches){
return $matches[1] .'+test_replace+'. $matches[1];
},
$string
);

echo "STRING OUT - |$string|<br>\n";


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kirh
Господа, спасибо огромное за ответы!
Действительно preg_replace_callback - решение проблемы, функция внутри отрабатывает как надо, в отличие от preg_replace, где вместо числового значения выдается неудобоваримая строка.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.