$Text = "foo [code]bla<br>bla[/code] foo";
echo preg_replace_callback('/\[code\](.*?)\[\/code\]/s', 'wrap_code', $Text);
function wrap_code($matches) {
return '<mytag>'.htmlspecialchars($matches[1]).'</mytag>';
}
Как видно из preg_replace_callback()
документации , вы также можете создать встроенную функцию обратного вызова через create_function()
или с PHP 5.3.0, даже используя анонимную функцию .
Общий подход, однако, был бы таким:потому что неохотный квантификатор не будет вызываться чаще, чем необходимо:
\[(code|b|whatever)\]([^\[]+|.*?)\[\/\1\]