Я написал функцию, которая заменяет определенные шаблоны в блоге. Например, когда кто-то печатает: :)
эта функция заменяет смайлик смайлик.
Однако сейчас я пытаюсь сделать что-то особенное, но не знаю, как это сделать. Я хотел бы проанализировать совпадение с другой функцией следующим образом:
$pattern[] = "/\[ourl\](.*?)\[\/ourl\]/i";
$replace[] = "" . getOpenGraph("$1") . "";
$value = preg_replace($pattern, $replace, $value);
Если кто-то использует [ourl] www.cnn.com [/ ourl], эта функция будет извлекать информацию OpenGraph и возвращать определенный HTML-код.
Однако это не работает, потому что это не разбирает $1
к функции.
Как я могу решить это?
ОБНОВИТЬ:
Судя по подсказке, которую дал мне u_mulder, я смог это сделать
Я создал демонстрацию, чтобы показать, как позвонить 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
Попробуй это:
<?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;