Maison >Problème commun >Erreurs courantes pour les débutants qui apprennent les expressions régulières

Erreurs courantes pour les débutants qui apprennent les expressions régulières

angryTom
angryTomavant
2019-11-09 17:42:563823parcourir

L'avantage des règles régulières est qu'elles sont faciles à utiliser. Après quelques heures d'étude, vous pouvez comprendre la plupart des règles régulières. Bien que vous puissiez les comprendre, au cours de la pratique, vous rencontrerez encore beaucoup de choses. que vous ne voulez pas savoir. Si vous voulez des résultats, après tout, la grammaire des expressions régulières est encore un peu étrange. Cet article a compilé quelques erreurs qui sont souvent commises lors du processus d'apprentissage des expressions régulières.

Erreurs courantes pour les débutants qui apprennent les expressions régulières

Expression régulière

1 Espaces

Nous écrivons généralement du code de temps en temps. , les espaces sont généralement utilisés comme un outil pour rendre le code plus standardisé, ainsi que l'indentation et les tabulations appropriées au début de la ligne, pour rendre le code plus clair. Mais soyez prudent dans les expressions régulières - l'espace lui-même est également un caractère à faire correspondre. Si vous utilisez les espaces de manière inappropriée :

echo preg_match('/a{1, 3}/', "aaa") ? '匹配' : '不匹配';  // 不匹配

Par exemple, l'expression régulière ci-dessus est destinée à correspondre à 1 à 3 a, mais en fait. ne correspondra pas aux trois a suivants, car il y a un espace supplémentaire au milieu de {1, 3}, ce qui invalide la signification originale du métacaractère "{}" et devient un caractère ordinaire :

echo preg_match('/a{1, 3}/', "a{1, 3}") ? '匹配' : '不匹配';  // 匹配

" a {1, 3}" correspond à la place, ce qui n'est évidemment pas ce que nous voulons, nous devons donc faire attention à ne pas utiliser d'espaces à moins que le caractère espace lui-même ne corresponde :

echo preg_match('/a{1,3}/', "aaa") ? '匹配' : '不匹配';  // 匹配

※ Exceptions Le modificateur de motif C'est difficile à comprendre et son utilisation n'est pas recommandée :

echo preg_match('/a a a/x', "aaa") ? '匹配' : '不匹配';  // 匹配

2. Capitalisation

C'est facile à comprendre. C'est fondamentalement une erreur d'inattention. utilise habituellement Lors de la recherche de lettres dans les outils de recherche, les lettres majuscules et minuscules correspondent généralement. Parfois, vous oubliez que les expressions régulières ne correspondent pas automatiquement aux lettres majuscules et minuscules :

echo preg_match('/flag/', "Flag") ? '匹配' : '不匹配';  // 不匹配

Il peut y avoir des cas où la première lettre de. la chaîne ainsi sélectionnée est en majuscule. Naturellement, il n'y aura pas de correspondance pour le moment, nous devons prendre en compte les majuscules et les minuscules. Mais parfois, nous voulons faire correspondre un certain mot. Tant que ces quatre lettres correspondent, il est plus difficile d'écrire :

echo preg_match('/[Ff][Ll][Aa][Gg]/', "Flag") ? '匹配' : '不匹配';  // 匹配

Bien qu'il soit difficile d'imaginer qu'il existe une chose aussi étrange que "fLaG". " Méthode d'écriture, mais si vous ne l'écrivez pas comme ça, vous ne pouvez pas faire correspondre toutes les situations, mais parfois on ne se soucie pas de la casse, mais la chaîne à faire correspondre est très longue. J'ai peur de le faire Je serai épuisé si je l'écris comme ça, mais heureusement nous avons la modification « i ». Symbole :

echo preg_match('/flag/i', "Flag") ? '匹配' : '不匹配';  // 匹配

Lorsque le modificateur "i" est défini, la correspondance de casse dans le modèle sera insensible.

3. Mode gourmand

Les quantificateurs "+" et "*" sont en mode gourmand par défaut. Les débutants ne devraient pas rencontrer les problèmes que cela entraîne avant. Vous ne comprendrez peut-être pas. ce que cela signifie. Voici un exemple de kano :

preg_match_all(&#39;/<span>.*<\/span>/&#39;, "<span>aaa</span><span>bbb</span>", $matches);
var_dump($matches);

Erreurs courantes pour les débutants qui apprennent les expressions régulières

L'intention initiale de la régularité est de trouver toutes les étendues dans une balise de chaîne et de les mettre. dans un tableau, mais le résultat est étrange : les deux étendues correspondent en même temps ! En fait, c'est raisonnable si vous y réfléchissez. La chaîne "aaabbb" commence en effet par , mais le .* qu'il contient correspond à trop de contenus, "aaabbb" correspondent tous. Il s'agit du mode gourmand de "+" et "*" - par défaut, ils correspondront à autant de caractères que possible, et l'ajout d'un "?" à la fin peut annuler ce mode gourmand afin qu'ils correspondent uniquement au moins de contenu possible :

preg_match_all(&#39;/<span>.*?<\/span>/&#39;, "<span>aaa</span><span>bbb</span>", $matches);
var_dump($matches);

Erreurs courantes pour les débutants qui apprennent les expressions régulières

Cette fois, nous avons obtenu le résultat que nous souhaitions.

La syntaxe régulière est assez particulière, et il est facile d'avoir des ennuis si vous n'y prêtez pas attention.

Étude recommandée : "Introduction rapide aux expressions régulières"

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer