OVH Cloud OVH Cloud

rechercher le code entre balise

4 réponses
Avatar
Support
Bonjour a tous.

Ma question va ptet paraitre stupide (et j'en suis désolée)

Mais y a t il une fonction toute faite en php qui permet de trouver le code
qui se trouve entre une balise <tata> et une balise </tata> ?

Merci.

4 réponses

Avatar
Guillaume Bouchard
Support wrote:
Bonjour a tous.


Bonjour.

Mais y a t il une fonction toute faite en php qui permet de trouver le code
qui se trouve entre une balise <tata> et une balise </tata> ?


Deux solution.
Soit avec strpos

$start = strpos ( $str,'<tata>');
$end = strpos ( $str,'</tata>');

$str = substr ( $str, $start + 5, $start - $end - 5 );

Soit à coup de regex dans le cas ou tu ai plusieurs chaines à capturer,
cela te rendra un code plus joli :


preg_match_all('`<tata>.*?</tata>`si',$str,$match);

--
Guillaume.

Avatar
P'tit Marcel
Guillaume Bouchard wrote:
preg_match_all('`<tata>.*?</tata>`si',$str,$match);


Pourquoi un ? après l' * ?

Avatar
__marc.quinton__
P'tit Marcel wrote:
Guillaume Bouchard wrote:

preg_match_all('`<tata>.*?</tata>`si',$str,$match);



Pourquoi un ? après l' * ?


ce n'est pas pour empecher que l'expression sous non gourmande ?
en effet :

<tata>123</tata> ... <tata>456</tata>

donnerai : "123</tata> ... <tata>456" avec .*
et "123" avec .*? (non gourmand)


Avatar
Guillaume Bouchard
P'tit Marcel wrote:
Guillaume Bouchard wrote:

preg_match_all('`<tata>.*?</tata>`si',$str,$match);


Pourquoi un ? après l' * ?


La gourmandise si je ne m'abuse (est un vilain defaut).
C'est equivalent localement à l'option U, pour éviter de matcher

<tata>hahaha</tata>bhbhbhbh<tata>hahahah</tata> comme étant :

hahaha</tata>bhbhbhbh<tata>hahahah

J'ai bon ?

--
Guillaume.