Aller au contenu

PHP Regex Lazy problème ?


Sujets conseillés

Posté

Bonjour,

Je sollicite l'aide des regex gourous du forum! :wacko:

Le problème: je souhaite extraire dans du html un pattern présent plusieurs fois. je n'arrive pas à formuler la regex qui me donne la partie entre O et X contenant S . En fait , s'il y a des parties O .... X ne contenant pas S , j'ai une imbrication. cf ci dessous

<?php      

$buff="
<br>1 khkjh dfgkhkjhk kjhfdjhdgjh O lkjlkj lkjlkj   lkj lkj X
<br>2 kdsflkjdfl                  O  kljlkjsdlksjflkjf dsfs1X
<br>3 zoipoip                     O  lkjlj  S dadsdfsf     X
<br>4 fgdgruj                     O  lkjlj  S dadsdfsf     X
<br>5 kdsflkjdfl                  O  kljlkjsdlksjflkjf dsfs1 X
<br>6 akdsflkjdfl                  O  kljlkjwerr  231 kjf dsfs1 X
<br>7 asdasddasd";

echo "$buff<br><br>";
 
$Pattern=   "!O(.+)[^O](.+)[S](.+)X!sU";      

$buff2=preg_replace($Pattern, "O-S-X", $buff);   $buff=$buff2;

echo $buff;

?>

j'obtiens (en rouge la gourmandise!):

ceci

1 khkjh dfgkhkjhk kjhfdjhdgjh O lkjlkj lkjlkj lkj lkj X

2 kdsflkjdfl O kljlkjsdlksjflkjf dsfs1X

3 zoipoip O lkjlj S dadsdfsf X

4 fgdgruj O lkjlj S dadsdfsf X

5 kdsflkjdfl O kljlkjsdlksjflkjf dsfs1 X

6 akdsflkjdfl O kljlkjwerr 231 kjf dsfs1 X

7 asdasddasd

devient

1 khkjh dfgkhkjhk kjhfdjhdgjh O-S-X

4 fgdgruj O-S-X

5 kdsflkjdfl O-S-X

6 akdsflkjdfl O-S-X

7 asdasddasd

au lieu de

1 khkjh dfgkhkjhk kjhfdjhdgjh O lkjlkj lkjlkj lkj lkj X

2 kdsflkjdfl O kljlkjsdlksjflkjf dsfs1X

3 zoipoip O-S-X

4 fgdgruj O-S-X

5 kdsflkjdfl O kljlkjsdlksjflkjf dsfs1 X

6 akdsflkjdfl O kljlkjwerr 231 kjf dsfs1 X

7 asdasddasd

Merci de votre aide.

A+ :wacko:

Posté

Salut et bienvenue à bord...

Remplace ton $Pattern par

$Pattern=   "!O[^OX]+S[^O]+X!sU";

qui veut dire:

un O

suivi d'un ou plusieurs caractères différents de O ou X

suivi d'un S

suivi d'un ou plusieurs caractères différents de O

suivi d'un X

;)

Dan

Posté

Merci DAN,

Nickel :P

J'ai remarqué que souvent les REGEX sont définies pour des suites de caractères,

et si au lieu des caractères O S et X, on a

START MIDDLE et END

On fait quoi ? Pour l'instant, je convertis START, MIDDLE et END en caractères\xA9 \xAA \xAB (non utilisés dans des pages web) pour pouvoir travailler au niveau caractère mais si tu as une solution plus élégante, je suis preneur.

Merci encore :hourra:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...