¿Puedes ayudar con esta expresión regular en mi sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Error:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Gracias.
Comentarios
Respuesta
Es probable que el problema sea la ubicación del signo -
en tu lista de personajes.
Ya usó el hecho de que los rangos de caracteres se pueden expresar con [start-end]
, como en [a-z]
que es la abreviatura de [abcdefghijkl...xyz]
(aunque vea la advertencia a continuación). Eso significa que el -
es un carácter especial, y si ocurre entre dos " regulares ", se interpreta como que indica otro rango más que abarca estos dos caracteres y cada uno de ellos.
Por supuesto, esto solo funciona si el carácter después de -
está lexicográficamente " posterior " en el orden de clasificación y luego el carácter que lo precede, que también es el motivo de su mensaje de error (usted verá que desaparece si dice (-_
en su lugar, aunque eso no resolverá su problema ).
Ya que obviamente desea para que coincida con el -
literal, y según cómo se interpreten las expresiones regulares en .nanorc
, usted
- tienen que escapar de él (es decir,
\-
), o - colocarlo en primer o último lugar en el carácter lista (es decir
[-etc]
o[etc-]
) que serían estándar en las expresiones regulares POSIX y GNU y por lo tanto la solución más probable en un sistema Linux .
Ver por ejemplo aquí para obtener más referencias.
Advertencia : la declaración anterior " [a-z]
es la abreviatura de [abcdefghijkl...xyz]
es no incondicionalmente cierto ! La forma en que se interpreta el rango depende de la configuración regional, específicamente del orden de clasificación.
- En " C " locale, el orden es según el valor del código ASCII, es decir,
ABC...XYZ...abc...xyz
. Aquí,[a-z]
en realidad significa " todos los caracteres en minúscula ". - En la mayoría de las otras configuraciones regionales, los caracteres en mayúsculas y minúsculas se agrupan, es decir, el orden es
aAbBcC...xXyYzZ
. Aquí,[a-z]
significaría " todos los caracteres en minúscula y todos los caracteres en mayúscula exceptoZ
. - El tratamiento de caracteres no ASCII como " diéresis " es otro problema.
Consulte aquí y aquí para obtener más información sobre el tema.
Responder
Pegar esto en https://regexr.com/ ayuda a depurar mejor.
No escapó -
en el rango, ya que -
se usa para especificar el rango.
Anterior:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Corrección:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
Comentarios
- Gracias por el enlace
- Escapar un guión en una expresión entre corchetes no ayudaría. Tenga en cuenta que las barras diagonales inversas no tienen un significado especial para la expresión dentro de
[...]
. Esto también significa que[\.]
coincide con un punto o una barra invertida. - ¿En serio? Yo dudo. Para hacer coincidir la barra inclinada, debe escapar de ella dos veces \\ para que coincida
- @JamesJohn Pruebe, por ejemplo
grep '[\]' <<<'\'
, ogrep -o '[\.]' <<<'123\.abc'
- Pegue el problema en grep y vea el error, luego aplique mi corrección para solucionarlo
-
): esto puede interpretarse como un rango …