我想添加到#indlude中。即
#include<stdio.h>
#include<math.h>
int main()
是我的目标字符串,它将是:
<span class="header">#include<stdio.h></span>
<span class="header">#include<math.h></span>
int main()
我尝试使用正则表达式,如下所示:
<?php
$input = '#include<stdio.h> int main()';
$input = preg_replace('/(#(\w)+<(\w)+.h>)/','<span class="header">$1</span>',$input);
echo $input;
?>
但是没有运气。有想法吗?
答案 0 :(得分:2)
除非另有说明,否则不需要任何捕获组或行起始符;只需替换全串匹配($0
)
代码:(Demo)
$string = <<<STRING
#include<math.h>
#include<stdio.h>
int main()
STRING;
echo preg_replace('~#include<[^>]+>~', '<span class="header">$0</span>', $string);
输出:
<span class="header">#include<math.h></span>
<span class="header">#include<stdio.h></span>
int main()
取反的字符类([^>]
将贪婪地匹配<
和>
之间的所有字符-从模式效率的角度考虑,这是优选的。