web-dev-qa-db-fra.com

Regex d'espaces blancs en option

Je rencontre un problème en essayant d'ignorer les espaces entre certains caractères. Je fais des recherches sur Google depuis quelques jours et je 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 certains 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 le manque d'espace entre width = "" et 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'espace entre width = "" et height = "".)

Est-il possible d'ignorer les espaces entre ces personnages? Comme je ne suis pas un expert Regex.

31
jameslfc19

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

\ s signifie espace blanc

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

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

* indique que le caractère précédent peut apparaître 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 optionnel entre le nom de l'attribut et =.

Si vous voulez un espace optionnel après le = également, ajoutez un \s? après cela aussi.

De même, partout où vous avez des caractères facultatifs, vous pouvez utiliser ? si l'occurrence maximale est 1 ou * si l'occurrence maximale est illimitée, en suivant le caractère facultatif.

Et votre problème réel était [\s*] qui provoque l'occurrence de n espace ou a * sous forme de caractères entre [ et ] est une classe de caractères. Une classe de caractères permet l'occurrence de n'importe lequel de ses membres une fois (donc supprimez *) et si vous ajoutez un quantificateur (?, +, * etc) après le ] n'importe quel caractère de la classe de caractères peut apparaître selon le quantificateur.

84
Naveed S