2 votes

Comment ajouter une balise supplémentaire à un mot spécifique à l'aide d'une expression régulière et de php ?

Je veux ajouter dans #indlude, c'est-à-dire que si

#include<stdio.h> 
#include<math.h>
int main() 

est ma chaîne cible, alors ce sera :

  <span class="header">#include<stdio.h></span>
  <span class="header">#include<math.h></span>
  int main() 

J'ai essayé d'utiliser une expression régulière comme suit :

<?php 
$input = '#include<stdio.h> int main()';
$input = preg_replace('/(#(\w)+<(\w)+.h>)/','<span class="header">$1</span>',$input);

echo $input;
?>

Mais pas de chance. Une idée ?

2voto

mickmackusa Points 18931

Sauf indication contraire, vous n'avez pas besoin de groupes de capture ou d'ancres de début de ligne ; il suffit de remplacer la correspondance de la chaîne complète ( $0 )

Code : ( Démo )

$string = <<<STRING
#include<math.h>
#include<stdio.h>

int main()
STRING;

echo preg_replace('~#include<[^>]+>~', '<span class="header">$0</span>', $string);

Salida:

<span class="header">#include<math.h></span>
<span class="header">#include<stdio.h></span>

int main()

La classe de caractères négationnistes ( [^>] ) correspondra avec avidité à tous les caractères compris entre < y > -- c'est préférable pour des raisons d'efficacité du modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X