2010-09-10 3 views
1

Je dois écrire une expression régulière pour les éléments suivants (NB ignorer les retours chariot, je les ai ajouté pour une meilleure lisibilité.):Aide à l'expression régulière pour racler site

<strong>Contact details</strong> 
<p><label>Office:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br /> 
<label>E-mail:</label>&nbsp;<a href="mailto:[email protected]">[email protected]</a><br /> 

J'utilise

/([\+\d\(\)\s]+)/ 

Qui correspond aux blocs de numéros et je peux utiliser et décaler de 0-2 pour les identifier. Le problème est qu'il retourne aussi des espaces blancs qui déforment mes décalages. Comment dire "il doit contenir au moins un chiffre dans le match"?
J'ai aussi essayé

/\<label\>Office:\<\/label\>&nbsp;([\+\d\(\)\s]+)\<br \/\>/ 

Mais ce serait revenir

+44 (0)12 3456 7890<br /> 
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br /> 
<label>E-mail:</label>&nbsp;<a href="mailto:[email protected]">[email protected]</a> 
+0

Grattage coordonnées - pourquoi voudriez-vous faire cela ... que les odeurs comme faire la récolte email de masse ...? – t0mm13b

Répondre

1

Son pas une bonne idée pour analyser HTML utilisant l'expression rationnelle, utilisez une base DOM parse à la place.

Votre regex ne fonctionne pas parce que son gourmand, à faire changer non gourmand

([\+\d\(\)\s]+) 

à

([\+\d\(\)\s]+?) 

également +, ( et ) seront traités littéralement dans une classe char. Donc pas besoin de leur échapper:

([+\d()\s]+?) 
+0

Merci. J'utilise simple_html_dom pour aller aussi loin mais j'ai besoin de regexp pour la dernière étape pour sortir le numéro. Merci pour les conseils. – Simon

Questions connexes