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.
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.