Как вызвать функцию в preg_replace ()?

Я написал функцию, которая заменяет определенные шаблоны в блоге. Например, когда кто-то печатает: :) эта функция заменяет смайлик смайлик.

Однако сейчас я пытаюсь сделать что-то особенное, но не знаю, как это сделать. Я хотел бы проанализировать совпадение с другой функцией следующим образом:

$pattern[] = "/\[ourl\](.*?)\[\/ourl\]/i";
$replace[] = "" . getOpenGraph("$1") . "";
$value = preg_replace($pattern, $replace, $value);

Если кто-то использует [ourl] www.cnn.com [/ ourl], эта функция будет извлекать информацию OpenGraph и возвращать определенный HTML-код.

Однако это не работает, потому что это не разбирает $1 к функции.

Как я могу решить это?

ОБНОВИТЬ:

Судя по подсказке, которую дал мне u_mulder, я смог это сделать

0

Решение

Я создал демонстрацию, чтобы показать, как позвонить getOpenGraph() и как группы захвата передаются в качестве аргументов без указания их во втором параметре preg_replace_callback(),

Я изменил разделители шаблонов, так что косую черту в конце тега не нужно экранировать.

function getOpenGraph($matches){
return strrev($matches[1]);  // just reverse the string for effect
}

$input='Leading text [ourl]This is ourl-wrapped text[/ourl] trailing text';
$pattern='~\[ourl\](.*?)\[/ourl\]~i';
$output=preg_replace_callback($pattern,'getOpenGraph',$input);
echo $output;

Выход:

Leading text txet depparw-lruo si sihT trailing text
1

Другие решения

Попробуй это:

<?php

$content = "[ourl]test[/ourl]\n[link]www.example.com[/link]";
$regex = "/\[(.*)\](.*?)\[(\/.*)\]/i";

$result = preg_replace_callback($regex, function($match) {
return getOpenGraph($match[1], $match[2]);
}, $content);

function getOpenGraph($tag, $value) {
return "$tag = $value";
}
echo $result;
0

По вопросам рекламы [email protected]