¿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

  • Tal vez debería escapar del guión (-): esto puede interpretarse como un rango …

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 excepto Z.
  • 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 '[\]' <<<'\', o grep -o '[\.]' <<<'123\.abc'
  • Pegue el problema en grep y vea el error, luego aplique mi corrección para solucionarlo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *