Php 如何计算匹配数并在正则表达式中使用它?
我试图得到这个结果:Php 如何计算匹配数并在正则表达式中使用它?,php,regex,Php,Regex,我试图得到这个结果: <li class="beatle_1">Paul</li> <li class="beatle_2">John</li> <li class="beatle_3">George</li> <li class="beatle_4">Ringo</li> Jörg Westheide:“没错,lib pcre没有。我也没有(现在)找到了一种以完全兼容Perl的方式实现g修饰符的方
<li class="beatle_1">Paul</li> <li class="beatle_2">John</li> <li class="beatle_3">George</li> <li class="beatle_4">Ringo</li>
Jörg Westheide:“没错,lib pcre没有。我也没有(现在)找到了一种以完全兼容Perl的方式实现g修饰符的方法。有关问题内容的详细信息,请参阅perlre手册页中的“重复模式匹配零长度子字符串”部分。如果这不适用于您的问题,您应该能够通过循环解决问题。”对于PHP5.3,您可以使用匿名函数进行此操作 看这个例子
echo preg_replace_callback('/([\w]+)/', function ($matches) {
static $pos = 0;
return sprintf('<li class="beatle_%d">%s</li>', ++$pos, $matches[1]);
}, 'Paul John George Ringo');
echo preg\u replace\u回调('/([\w]+)/',函数($matches){
静态$pos=0;
返回sprintf(“%s ”,++$pos,$matches[1]);
}“保罗·约翰·乔治·林戈”);
如果您使用的是PHP5.3,您可以尝试使用闭包来替换回调():
$subject = 'Paul John George Ringo';
$n = 0;
echo preg_replace_callback('/([\w]+)/', function($matches) use (&$n) {
return '<li class="beatle_'.(++$n).'">'.$matches[1].'</li>';
}, $subject);
$subject='pauljohngeorgeringo';
$n=0;
echo preg_replace_回调('/([\w]+)/'),函数($matches)使用(&$n){
返回“。$matches[1]。 ”;
}(主题),;
这似乎是对正则表达式的严重滥用。为什么一定要用正则表达式执行此操作?您可以通过执行preg\u match和preg\u match\u来获得匹配的结果。有关详细信息,请访问此处。但是这里的事情又变得复杂了。或者,在5.3之前,您可以使用常规函数使用preg\u replace\u callback
。在python中有什么方法可以做到这一点吗?(捕获匹配组使用“*”运算符重复的次数)??抱歉,您的代码返回:使用(&$n)
?(注意引用)。我得到了预期的结果:“echo preg_replace_callback('/([\w]+)/', function ($matches) {
static $pos = 0;
return sprintf('<li class="beatle_%d">%s</li>', ++$pos, $matches[1]);
}, 'Paul John George Ringo');
$subject = 'Paul John George Ringo';
$n = 0;
echo preg_replace_callback('/([\w]+)/', function($matches) use (&$n) {
return '<li class="beatle_'.(++$n).'">'.$matches[1].'</li>';
}, $subject);