Pourquoi preg_match
pour PHP et d'autres fonctions regex d'autres langues ont des délimiteurs comme //
dans la chaîne indiquant le modèle à rechercher? Je n'ai presque aucune expérience avec regex, mais la raison pour laquelle deux de ces délimiteurs indiquent le début et la fin d'une chaîne pattern
n'est pas évidente pour moi, parce que vous pourriez simplement utiliser le début et la fin de la chaîne.À quoi servent les barres obliques dans les fonctions regex?
Répondre
D'une manière générale, les antislashs sont des évasions. Ils suppriment la signification d'un personnage pour que le personnage soit traité comme ce à quoi il ressemble littéralement. Dans d'autres cas, les barres obliques inverses ajoutent une signification à un omble, le transformant en métacaractère. par exemple, dans les expressions rationnelles:
/d/ - look for a character "d"
/\d/ - look for a digit: 0,1,2,3,4,5,6,7,9, aka [0-9] - adding significance
/\\/ - look for a literal \ char - REMOVING significance
Les // sont des barres obliques. Ce ne sont que les délimiteurs standard par défaut, car ce sont les délimiteurs standard utilisés dans Perl, et PHP implémente les expressions régulières compatibles PCRE-Perl.
$m =~ /d/ - perl for matching a "d" character in a string
$m =~ /\d/ - perl for matching a digit
En PHP, car les expressions rationnelles ne sont que des chaînes, ne fait pas partie de la langue de base, vous pouvez utiliser tout délimiteur que vous voulez. Le premier caractère de votre modèle devient le délimiteur:
preg_match('/foo/', $str) #1, using/forward slashes as delimiter
preg_match('|foo|', $str) #2, using | pipes as delimiters
preg_match('f\foof', $str) #3, using the letter F as delimiter
Notez maintenant que vous pouvez utiliser n'importe quel caractère. f
Dans la 3ème regex est le premier caractère du modèle, donc c'est le délimiteur. Ce qui signifie que si vous utilisez cette regex pour rechercher un "f" dans votre texte, vous devez échapper à F (\f
), de sorte que le F interne est vu comme un f, pas comme le délimiteur de modèle
PHP utilise des expressions régulières de type Perl, donc je suppose que Perl a 'inventé' cette syntaxe.
Ces délimiteurs sont utilisés pour ajouter certains modificateurs à l'expression régulière. Bien sûr PHP pourrait aussi utiliser des drapeaux dans l'appel de la fonction ou quelque chose comme ça pour le faire mais cela changerait la syntaxe de Perl. Je pense donc que ces délimiteurs sont utilisés à des fins historiques.
- 1. À quoi servent les indexeurs?
- 2. À quoi servent les accords?
- 3. Les barres obliques s'affichent comme des barres obliques dans php
- 4. Expression régulière qui supprime les espaces blancs, les barres obliques et les barres obliques inverses
- 5. A quoi servent les Ember.Controllers?
- 6. Comment échapper des barres obliques dans regex?
- 7. Regex pour valider les numéros et les barres obliques
- 8. C++: à quoi servent les références autonomes?
- 9. À quoi servent les projections de type?
- 10. À quoi servent les spécifications/demandes?
- 11. À quoi servent les ornements WPF?
- 12. À quoi servent les méthodes mangoustes et les statiques?
- 13. À quoi servent les demandes d'extraction/fusion?
- 14. À quoi servent les options -Index htaccess?
- 15. à quoi servent les délégués en C#?
- 16. À quoi servent les générateurs de liaison?
- 17. À quoi servent les cookies Javascript?
- 18. À quoi servent les prises et les lancers dans Ruby?
- 19. À quoi servent les fichiers d'en-tête dans C?
- 20. python remplace les barres obliques inversées par des barres obliques
- 21. Regex: Trouver toutes les barres obliques mais "</"
- 22. Comment fonctionnent les métabalises et à quoi servent-elles?
- 23. Regex pour les barres obliques avant en option
- 24. À quoi servent les bases de données escape() et quote()?
- 25. A quoi servent les macros du préprocesseur?
- 26. Préserver les doubles barres obliques dans mod_rewrite
- 27. A quoi servent les composants fortement connectés?
- 28. Supprimer les barres obliques dans Angularjs
- 29. A quoi servent les relations génériques inverses?
- 30. A quoi servent les éléments XML vides?
Et vous n'avez pas trouvé de réponse de cela dans les documents PHP OU ailleurs? – anubhava
Merde, je suis un idiot @anubhava. D'accord, la raison est évidente maintenant. Un endroit pour mettre des drapeaux à la fin des cordes. Par exemple (docs PHP): '// Le" i "après le délimiteur de pattern indique une recherche insensible à la casse'. Quelle est la ligne de conduite appropriée, puisque c'est une question triviale ... pour fermer ma question maintenant? – ironicaldiction
Si vous voulez, vous pouvez simplement supprimer votre réponse. – anubhava