2011-03-18 2 views
0

preg_match_all('/<p class="row">(.+?)<\/span>(.+?)- <a href="(.+?)">(.+?)<\/a>(.+?)<font size="-1"> \((.+?)\)<\/font>(.+?)<\/p>/is', $HTML, $matches);Regex - valeur facultative

J'ai l'expression rationnelle suivante, le problème est que seulement parfois la section montrent réellement. L'expression rationnelle que j'ai a besoin que la police soit là, comment puis-je la rendre optionnelle?

Non seulement mkae facultative, mais tirer une valeur si elle existe

+0

Possible dupliquer: http://stackoverflow.com/questions/5254804/regex-optional-word-match –

Répondre

1

Cela fonctionne pour moi:

(?:<font size="-1">(.+?)<\/font>)? 

Autre exemple :

% perl -e '$x = "ab<font size=\"-1\">foo</font>"; print "$1 $2" if $x =~ /(ab)(?:<font size="-1">(.+?)<\/font>)?/' 
ab foo 

% perl -e '$x = "ab<font size=\"-1\">foo</fontXXXXXXX>"; print "$1 $2" if $x =~ /(ab)(?:<font size="-1">(.+?)<\/font>)?/' 
ab 
+0

Je ne veux pas qu'il soit non-capture. Je veux qu'il y ait ce qu'il y a dans la balise de police quand elle est disponible, mais si la balise de police n'existe pas, c'est ok. J'ai essayé ''/

(. +?) <\/span> (. +?) - (. +?) <\/a> ( \ ((. +?) \) <\/font>)? (. +?) <\/p>/is'' et il ne tire pas ce qu'il y a entre les balises de police. – Webnet

+0

Voir ma réponse révisée. Votre regex travaille pour moi. –

+0

Votre expression régulière ne correspond peut-être pas à l'espace et au (et) dans votre balise de police. c'est-à-dire essayer de détendre votre groupe correspondant pour qu'il soit juste ce qu'il y a dans la balise de police, et voir si cela donne une correspondance. –

0

Vous pouvez faire la police en option comme:

(<\/font>)? 
+0

Je dois le rendre facultatif, et tirer la valeur entre ces balises – Webnet

Questions connexes