Maison  >  Article  >  développement back-end  >  Comment gérer les espaces facultatifs dans les expressions régulières pour une extraction précise des données ?

Comment gérer les espaces facultatifs dans les expressions régulières pour une extraction précise des données ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 08:20:30387parcourir

How to Handle Optional Whitespace in Regular Expressions for Accurate Data Extraction?

Regex d'espaces facultatif : ignorer les espaces dans les valeurs d'attribut

En programmation, il existe des scénarios dans lesquels vous devez gérer les instances où les chaînes contiennent des espaces facultatifs . Cela peut être difficile lors de l'écriture d'expressions régulières pour extraire des données avec précision.

Considérez le code suivant :

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

Ce code extrait l'attribut src d'une image du balisage HTML. Cependant, il ne parvient pas à gérer les cas où il n'y a pas d'espace entre certains attributs, tels que :

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

ou

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

Pour résoudre ce problème, nous pouvons utiliser une expression régulière d'espaces facultative. Cela nous permet d'ignorer les espaces entre les caractères. Voici comment :

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

Dans cette expression régulière mise à jour :

  • s ? before = signifie qu'un espace est autorisé mais facultatif.
  • s* après la valeur de l'attribut autorise un espace facultatif après le nom et la valeur de l'attribut.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn