预替换回调
Preg replace callback
我正在尝试找出如何将可选组弹出到 preg_replace_callback 但我无法匹配 + 字符
这是我到目前为止的代码
$pattern=preg_replace_callback('~:(?P<_param>[Aa-zZ0-9_\-]+)(?:(P<_mod>[^/]))?~',
function($matches)
{
print_r($matches);
$key=$matches[1];
return '(?<'.$matches['_param'].'>'.$matches['_mod'].')';
}
,$subject);
这会生成以下模式
/category/(?<foo>)/(?<baz>.)+/(?<bar>.)+/(?<harry>.)+/foo
对于以下字符串
/category/:foo/:baz.+/:bar.+/:harry.+/foo
如您所见,它继承了 .但不是加号,基本上我希望它携带(进入命名的 _mod 捕获组)我附加到 :variable.
的任何修饰符
我不太擅长正则表达式,所以我很惊讶能走到这一步,非常感谢对我的追求的任何帮助
组后加量词_mod
:
$pattern=preg_replace_callback('~:(?P<_param>[Aa-zZ0-9_\-]+)(?:(?P<_mod>[^/]+))?~',function($matches){
// here ___^
问题:你认为 [Aa-zZ]
匹配什么?
我猜你想要 [A-Za-z0-9_\-]+
或 [\w-]
此外,preg_replace
就足够了:
$pattern = preg_replace('~:([\w-]+)(?:([^/]*))?~', "(?<>)", $subject);
我正在尝试找出如何将可选组弹出到 preg_replace_callback 但我无法匹配 + 字符
这是我到目前为止的代码
$pattern=preg_replace_callback('~:(?P<_param>[Aa-zZ0-9_\-]+)(?:(P<_mod>[^/]))?~',
function($matches)
{
print_r($matches);
$key=$matches[1];
return '(?<'.$matches['_param'].'>'.$matches['_mod'].')';
}
,$subject);
这会生成以下模式
/category/(?<foo>)/(?<baz>.)+/(?<bar>.)+/(?<harry>.)+/foo
对于以下字符串
/category/:foo/:baz.+/:bar.+/:harry.+/foo
如您所见,它继承了 .但不是加号,基本上我希望它携带(进入命名的 _mod 捕获组)我附加到 :variable.
的任何修饰符我不太擅长正则表达式,所以我很惊讶能走到这一步,非常感谢对我的追求的任何帮助
组后加量词_mod
:
$pattern=preg_replace_callback('~:(?P<_param>[Aa-zZ0-9_\-]+)(?:(?P<_mod>[^/]+))?~',function($matches){
// here ___^
问题:你认为 [Aa-zZ]
匹配什么?
我猜你想要 [A-Za-z0-9_\-]+
或 [\w-]
此外,preg_replace
就足够了:
$pattern = preg_replace('~:([\w-]+)(?:([^/]*))?~', "(?<>)", $subject);