如何将正则表达式参数传递给 PHP 中的 preg 替换回调?
Posted
技术标签:
【中文标题】如何将正则表达式参数传递给 PHP 中的 preg 替换回调?【英文标题】:How do I pass a regex parameter to a preg replace callback in PHP? 【发布时间】:2014-03-19 07:38:08 【问题描述】:我正在使用 preg_replace_callback 解析我的 [quote id=123][/quote] 公告板代码标签。使用正则表达式参数传递报价 ID 的正确方法是什么?
$str = '[quote id=123]This is a quote tag[/quote]';
$str = preg_replace_callback("^[quote id=([0-9]+)](.*?)[/quote]^", _parse_quote("123", "message"), $str);
function _parse_quote($message_id, $original_message)
$str = '<blockquote>'.$original_message.'</blockquote>';
return $str;
【问题讨论】:
【参考方案1】:正则表达式应该是固定的。
[
和 ]
应该被转义以匹配它们。 ([
、]
在正则表达式中有特殊含义)。
代码调用_parse_quote
,而不是将函数传递给preg_replace_callback
。只需将函数名称作为字符串传递即可。
您可以通过索引访问捕获的组。 ($matches[2]
获取第二个捕获组)
$str = '[quote id=123]This is a quote tag[/quote]';
$str = preg_replace_callback("^\[quote id=([0-9]+)\](.*?)\[/quote\]^", "_parse_quote", $str);
echo $str;
function _parse_quote($matches)
$str = '<blockquote>' . $matches[2] . '</blockquote>';
return $str;
输出:
<blockquote>This is a quote tag</blockquote>
【讨论】:
以上是关于如何将正则表达式参数传递给 PHP 中的 preg 替换回调?的主要内容,如果未能解决你的问题,请参考以下文章
如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]
js 如何正则匹配多个,像php 的preg_match()