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

Susan Sarandon
Libérer: 2024-10-24 08:20:30
original
386 Les gens l'ont consulté

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];
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>#
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!