Romain Jouin
2010-08-12 20:08:08 UTC
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.
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.