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

  • Vous devriez peut-être échapper le tiret (-): cela peut être interprété comme une plage …

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 sauf Z.
  • Le traitement des caractères non ASCII comme " umlauts " est encore un autre problème.

Voir ici et ici pour dautres discussions sur le sujet.

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 '[\]' <<<'\', ou grep -o '[\.]' <<<'123\.abc'
  • Collez le problème dans grep et voyez lerreur, puis appliquez mon correctif pour le corriger

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *