Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

expression reguliere

1 réponse
Avatar
Romain Jouin
Salut à tous !

Une petite question sur les expression régulières :

j'ai un texte qui contient des adresses, mais dont je ne connais pas à
l'avance la structure : parfois il y a le nom du pays (France),
parfois il y a le nom d'un état (aux US).
Le texte est produit à partir d'une base de données, donc les champs
ont toujours les même noms, mais je ne sais pas à l'avance quels
champs vont sortir.

Je peux me retrouver avec :

1) une adresse en france :
dt>Location:</dt><dd class="adr">
<dd class="tel">01 44 05 72 72 </dd></dl>
<div class="street-address">17, place du Trocadéro</a></div>
<span class="locality">Paris</span>,
<span class="country-name">France</span>,
<span class="postal-code">75116</span></dd>
<dt>Phone:</dt>


ou avec :
2) une adresse aux états unis :
Location:</dt><dd class="adr">
<dd class="tel">(212) 708-9400 </dd></dl>
<div class="street-address">11 West 53 Street</a></div>
<span class="locality">New York</span>,
<span class="region">NY</span>,
<span class="postal-code">10019</span>
<dt>Phone:</dt>


Vous voyez qu'aux US il y a le mot "region" a la place de "country-
name". Je sais que je peux avoir l'un ou l'autre, donc je mets un | et
ça va, mais il se peut aussi que je n'ai aucun des deux, mais je veux
quand même récupérer le numéro de téléphone, qui lui même n'est peut
être pas présent. Comment récupérer en exreg des informations qui
sont après des parties de textes dont on ignore apriori la présence
mais que l'on veut quand même récupérer si elles existent ?
Si je n'ai pas le numéro de téléphone, je veux quand même récupérer le
pays. Si je n'ai pas le pays, je veux quand même récupérer le numéro
de téléphone. Si je n'ai aucun des deux, je ne veux pas que mon
programme plante :p

Pour l'instant j'ai ça :
$pattern = '/locality.?.?\>*?tel.*?\>(.*?)<*?country|region.*?
\>(.*?)<.*?postal.code.*?\>(.*?)<./';

Mais si je n'ai pas de téléphone, je ne suis pas sûr que ça marche !
Peut-on rendre optionel le fait de trouver le téléphone ? Et faire que
l'exreg fonctionne, même si il n'y a pas de tél ?

J'espère que je suis clair :p
Merci d'avance,
JR.

1 réponse

Avatar
Olivier Miakinen
Bonjour,

Le 12/08/2010 22:08, Romain Jouin a écrit :
Salut à tous !



Tout d'abord, désolé de répondre à un article vieux de deux semaines,
mais je vois que tu n'as reçu aucune autre réponse (je suppose que les
autres étaient en vacances, tout comme moi).

Une petite question sur les expression régulières :



Pour info, sache que le groupe fr.comp.lang.regexp est souvent approprié
pour ce genre de questions. En l'occurrence ça ne sera pas le cas ici.

[...]

Je peux me retrouver avec :

1) une adresse en france :
<dt>Location:</dt><dd class="adr">
<dd class="tel">01 44 05 72 72 </dd></dl>
<div class="street-address">17, place du Trocadéro</a></div>
<span class="locality">Paris</span>,
<span class="country-name">France</span>,
<span class="postal-code">75116</span></dd>
<dt>Phone:</dt>



C'est typiquement un cas où les expressions rationnelles ne doivent
*pas* être utilisées. Tu vas te compliquer la vie et te faire des n½uds
au cerveau, pour un résultat qui a toutes les chances de planter dans
des cas que tu n'auras pas prévus.

Je te suggère plutôt de construire un arbre XML à partir de ces données,
arbre que tu pourras alors parcourir à ta guise.

Pour la construction de l'arbre, tu as plutôt trop de choix que pas
assez : <http://www.php.net/manual/fr/refs.xml.php>. Ne les utilisant
pas moi-même je ne sais pas quel ensemble de fonctions est le plus
approprié, mais j'espère qu'en septembre tu auras plus de réponses.

Cordialement,
--
Olivier Miakinen