Espace Optionnel Regex

J'ai un problème en essayant d'ignorer les espaces entre certains caractères. J'ai googlé pendant quelques jours et n'arrive pas à trouver la bonne solution.

Voici mon code:

// Get Image data
preg_match('#<a href="(.*?)" title="(.*?)"><img alt="(.*?)" src="(.*?)"[s*]width="150"[s*]height="(.*?)"></a>#', $data, $imagematch);
$image = $imagematch[4];

, Fondamentalement, ce sont quelques-uns des scénarios que j'ai:

 <a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img alt="Sky1.png" src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png"width="150" height="84"></a>

(Notez l'absence d'un espace entre width="" src="")

Et

<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img alt="TallGrass.gif" src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" width="150"height="150"></a>

(Notez l'absence d'un espace entre width="" et height="".)

Est-il de toute façon d'ignorer les espaces dans entre ces personnages? Comme je ne suis pas un expert en Regex.

25
demandé sur Alex Ananjev 2013-01-12 15:46:47

1 réponses

Ajouter un \s? si un espace peut être autorisé.

\s représente l'espace blanc

? dit que le caractère précédent peut se produire une fois ou ne pas se produire.

Si plusieurs espaces sont autorisés et sont facultatifs, utilisez \s*.

* dit caractère précédent peut se produire zéro ou plusieurs fois.

'#<a href\s?="(.*?)" title\s?="(.*?)"><img alt\s?="(.*?)" src\s?="(.*?)"[\s*]width\s?="150"[\s*]height\s?="(.*?)"></a>#'

Permet un espace facultatif entre le nom de l'attribut et =.

Si vous voulez un espace optionnel après le = aussi, ajoutez un \s? après c'est aussi.

De même, partout où vous avez des caractères optionnels, vous pouvez utiliser ? si l'occurrence maximale est 1 ou {[6] } Si l'occurrence maximale est illimitée, en suivant le caractère facultatif.

Et votre problème [\s*], qui provoque l'apparition de un espace ou a * comme caractères inclus dans [ et ] est une classe de caractères. Une classe de caractères permet de survenance de l'un de ses membres une fois (donc supprimer *) et si vous ajoutez un quantificateur (?, +, * etc) après le ] tout caractère (s) dans la classe de caractères peut se produire en fonction du quantificateur.

72
répondu Naveed S 2013-01-12 12:19:55