preg_match ("/[-_^%&().A-Z0-9]/", $file)
À en juger, je peux voir que la queueest tout ce qui est A-Z et 0-9, mais pas sûr pour le début. Parce que ^ n'est pas échappé, il pourrait donc s'agir d'un "^" littéral ou être évalué à un NON, et il en va de même pour "." Donc je suis un peu confus. Avoir des choses dans l'option [] signifie-t-il que les choses sont littérales?
Réponses:
3 pour la réponse № 1Il recherche simplement l'un des caractères de la classe de caractères. C'est à dire. un des:
- Trait d'union, trait de soulignement, caret, pourcentage, esperant, parenthèses
- Lettres majuscules latines
- chiffres arabes
^
n’est interprété comme une négation d’une classe de caractères qu’au tout début de la classe. .
perd sa signification particulière à l'intérieur du caractèrecours complètement. Donc, oui, dans les classes de caractères, de nombreux caractères regex spéciaux sont utilisés littéralement. À quelques exceptions près, bien que la liste suivante ne soit pas exhaustive:
- Trait d'union moins (
-
) indique une plage entre deux autres caractères (c'est-à-dire pas au début ni à la fin). - Le caret (
^
) comme détaillé ci-dessus. - Classes de caractères prédéfinies (par exemple
w
) peut également être utilisé, ce qui formera une union avec les personnages de cette classe. Donc, votre classe de personnage pourrait être réduite à[-^%&().w]
.
2 pour la réponse № 2
^
a seulement une signification spéciale à l'intérieur []
si c'est le premier personnage.
-
a seulement une signification spéciale à l'intérieur []
si c'est entre deux caractères littéraux.
.
, (
et )
ne pas avoir une signification particulière à l'intérieur []
.
Il suffit de lire les informations de base dans le docs vous dirais tout cela.
La regex correspond à l'un des personnages de la classe.