Pouvez-vous maider avec cette expression régulière dans mon sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Erreur:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Merci.
Commentaires
Réponse
Le problème vient probablement du placement du signe -
dans votre liste de caractères.
Vous avez déjà utilisé le fait que les plages de caractères peuvent être exprimées par [start-end]
, comme [a-z]
étant un raccourci pour [abcdefghijkl...xyz]
(bien que voir la mise en garde ci-dessous). Cela signifie que le -
est un caractère spécial, et sil apparaît entre deux " régulier ", il est interprété comme indiquant une autre plage englobant ces deux caractères et chacun dentre eux.
Bien sûr, cela ne fonctionne que si le caractère après le -
est lexicographiquement " plus tard " dans lordre de tri puis le caractère qui le précède, qui est également la raison de votre message derreur (vous verra que cela disparaît si vous dites (-_
à la place, bien que cela ne résoudra pas votre problème ).
Puisque vous voulez évidemment pour correspondre au littéral -
, et selon la façon dont les expressions régulières sont interprétées dans le .nanorc
, soit
- doit léchapper (cest-à-dire
\-
), ou - le placer en premier ou en dernier dans le caractère liste (c.-à-d.
[-etc]
ou[etc-]
) qui serait standard dans les expressions régulières POSIX et GNU et donc la solution la plus probable sur un système Linux .
Voir par exemple ici pour plus dinformations.
Avertissement : linstruction ci-dessus " [a-z]
étant un raccourci pour [abcdefghijkl...xyz]
est pas inconditionnellement vrai ! Linterprétation de la plage dépend des paramètres régionaux, en particulier de lordre de classement.
- Dans le " C " locale, lordre est basé sur la valeur du code ASCII, cest-à-dire
ABC...XYZ...abc...xyz
. Ici,[a-z]
signifie en fait " tous les caractères minuscules ". - Dans la plupart des autres paramètres régionaux, les caractères majuscules et minuscules sont regroupés, cest-à-dire que lordre est
aAbBcC...xXyYzZ
. Ici,[a-z]
signifierait " tous les caractères minuscules et tous les caractères majuscules saufZ
. - Le traitement des caractères non ASCII comme " umlauts " est encore un autre problème.
Réponse
Coller ceci à https://regexr.com/ facilite le débogage.
Vous navez pas échappé à -
dans la plage, comme -
est utilisé pour spécifier la plage.
Ancien:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Correction:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
Commentaires
- Merci pour le lien
- Échapper un tiret dans une expression entre crochets naiderait pas. Notez que les barres obliques inverses nont aucune signification particulière pour lexpression à lintérieur de
[...]
. Cela signifie également que[\.]
correspond à un point ou à une barre oblique inverse. - Vraiment? Je doute. Pour faire correspondre la barre oblique, vous devez léchapper deux fois \\ pour la faire correspondre
- @JamesJohn Essayez par exemple
grep '[\]' <<<'\'
, ougrep -o '[\.]' <<<'123\.abc'
- Collez le problème dans grep et voyez lerreur, puis appliquez mon correctif pour le corriger
-
): cela peut être interprété comme une plage …