Php 正则表达式替换为由函数修改的反向引用
我想用div文本替换该类,如下所示:Php 正则表达式替换为由函数修改的反向引用,php,regex,replace,preg-replace,Php,Regex,Replace,Preg Replace,我想用div文本替换该类,如下所示: 此:FOO 变成: 因此,该类被更改为“icon”。ucfirst(strtolower(FOO))并删除文本 测试HTML <div class="grid-flags" >FOO</div> 替换 'class="icon'.ucfirst(strtolower($1).'"' 这是一个替换字符串的例子,我已经尝试了数百个。我读到/e修饰符对PHP代码求值,但我不明白它在我的例子中是如何工作的,因为我需要在类名周围加上双引号,
此:
FOO
变成:
因此,该类被更改为“icon”。ucfirst(strtolower(FOO))并删除文本
测试HTML
<div class="grid-flags" >FOO</div>
替换
'class="icon'.ucfirst(strtolower($1).'"'
这是一个替换字符串的例子,我已经尝试了数百个。我读到/e修饰符对PHP代码求值,但我不明白它在我的例子中是如何工作的,因为我需要在类名周围加上双引号,所以我不知道该用哪种方法来做
我在backref上尝试了一些变体,例如strtolower('$1')、strtolower('\1')、strtolower('{$1}'))
我尝试过单引号、双引号和各种转义等,但都没有效果
我甚至尝试了preg_replace_callback(),但没有成功
function callback($matches){
return 'class="icon"'.ucfirst(strtolower($matches[0])).'"';
}
您可以不使用e(估价)选项
$text='FOO';
$pattern='/class=“网格标志”>(FOO | BAR | BAZ)/;
$myCB=函数($cap){
返回'class=“icon”.ucfirst($cap[1])。“>”;
};
echo preg_replace_回调($pattern,$myCB,$text);
<>但不要使用正则表达式,您可能需要考虑一个更适合HTML或PHP的解析器。 < P>这对我来说是适用的。
$html = '<div class="grid-flags" >FOO</div>';
echo preg_replace_callback(
'/class *= *\"grid-flags\" *\>(FOO|BAR|BAZ)/'
, create_function( '$matches', 'return \'class="icon\' . ucfirst(strtolower($matches[1])) .\'">\'.$matches[1];' )
, $html
);
$html='FOO';
回显preg_replace_回调(
“/class*=*\”网格标志“*\>(FOO | BAR | BAZ)/”
,创建函数('$matches','return'class=“icon\”.ucfirst(strtolower($matches[1])。\'“>\'。$matches[1];'))
,$html
);
请注意的问题。我很难理解你的意思,但我想你想要这样的东西:
preg_replace('/class="grid-flags" \>(FOO|BAR|BAZ)/e',
'\'class="icon\'.ucfirst(strtolower("$1")).\'">\'',
$text);
示例输入的输出:
<div class="iconFoo"></div>
如果这不是你想要的,你能给我们一些输入和输出的例子吗
我必须同意,使用HTML解析器会更容易做到这一点。感谢大家周末的回答。这是我最初尝试的方式,也是最简洁的,所以我提出了一个公认的答案,但你们都提出了很好的观点。
preg_replace('/class="grid-flags" \>(FOO|BAR|BAZ)/e',
'\'class="icon\'.ucfirst(strtolower("$1")).\'">\'',
$text);
<div class="iconFoo"></div>