+ explication dans htaccess

J’ai ce code htaccess

RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ 

Mais je ne pouvais pas vraiment comprendre ce que fait [^/]+ J’ai cherché sur Google pendant un certain temps, mais je ne pouvais pas obtenir ce que je voulais.

Vous avez deux constructions de regex de base ici

Classe de personnage

Voir les classes de caractères sur regular-expressions.info

[...] est une classe de caractères, cela signifie que cette construction correspond à un caractère de la classe (à l’intérieur des crochets).

Votre classe commence par un ^ , qui donne une signification spéciale à la classe de caractères, c’est une classe de caractère négatif ( [^...] ), qui correspond à tout ce qui ne fait pas partie de la classe.

Quantificateur

Voir les quantificateurs sur regular-expressions.info

+ est un quantificateur, c’est-à-dire 1 ou plus

Signification de votre regex

Pour comprendre ce que cela fait, vous devez également prendre en compte la prochaine chose, le $ à la fin. Ceci est une ancre qui correspond à la fin de la chaîne.

Voir les ancres sur regular-expressions.info

donc ([^/]+)$ correspond à tous les caractères à la fin de la chaîne qui ne sont pas des barres obliques.

Ici vous pouvez également trouver un tutoriel de base

[^/] signifie tout caractère ne correspondant pas / .

Cela signifie:

Correspond à 1 ou plusieurs caractères jusqu’à ce que la barre oblique / soit trouvée

Tout ce qui est entre crochets [ et ] et qui a caret ^ au début, a une négation et donc:

[^/] désigne tout caractère sauf /

[^/]+ signifie 1 ou plusieurs caractères sauf /

[any_character] est une classe de caractères ou un jeu de caractères. [^any_character] est un jeu de classes de caractères ou de jeux de caractères nié .

Des ancres Ref :

Remember ^ également le sens: Le caret ^ correspond à la position avant le premier caractère de la chaîne (anchor) lorsqu’il n’est pas utilisé dans une classe Character.

De classe de classe Ref: Metacharacters Inside Classes de caractères :

Notez que les seuls caractères spéciaux ou métacaractères à l’intérieur d’une classe de caractères sont le crochet de fermeture (]), la barre oblique inverse (), le caret (^) et le tiret (-). Les métacaractères habituels sont des caractères normaux à l’intérieur d’une classe de caractères et n’ont pas besoin d’être échappés par une barre oblique inverse. Pour rechercher une écanvas ou plus, utilisez [+ *]. Votre regex fonctionnera correctement si vous échappez aux métacaractères normaux dans une classe de caractères, mais cela réduit considérablement la lisibilité.

De Repitition Ref
+ signifie un ou plusieurs caractères.

alors, [^/]+

Les moyens correspondent à n’importe quel caractère autre que / . Ainsi, il correspondra jusqu’à ce qu’un / soit rencontré.


Pour ^/([uge])/([^/]+)$

  • la chaîne doit commencer par /
  • suivi du caractère u ou g ou e
  • suivi par /
  • suivi et terminé par un ou plusieurs caractères autres que /

les () (parenthèses rondes) sont utilisées pour: Supports ronds Créer une référence de référence arrière

L’expression [^/] correspond à n’importe quel caractère qui n’est pas le / et le quanteur + indique que l’expression à gauche du quanteur doit apparaître au moins une fois.