2012-03-06 35 views
136

Duplicar posible:
How to match hyphens with Regular Expression?Regex - ¿Se deberían escapar los guiones?

guión es un carácter especial en expresiones regulares, por ejemplo, para seleccionar un rango, yo podría hacer algo como:

[0-9A-F] 

Pero fuera de corchetes es solo un personaje normal ¿verdad? He probado esto en un par de probadores de expresiones regulares en línea, y los guiones parecen funcionar como un carácter normal fuera de corchetes (o incluso dentro de corchetes si no está entre dos caracteres, por ejemplo, [-g] parece coincidir - ob) si ha escapado o no. No pude encontrar la respuesta a esto, pero me pregunto si es convencional o no escapar de los guiones.

Gracias!

+5

Depende del idioma que use para representar expresiones irregulares. – zzzzBov

+3

aquí hay una publicación similar que debería responder a sus preguntas: http://stackoverflow.com/a/4068725/56829 –

+4

No veo cómo este es un duplicado exacto. Esa pregunta es preguntar CÓMO escapar de los guiones. Ya sé cómo escapar de ellos y preguntar SI es necesario escapar de ellos.El hecho de que algunas de las respuestas se superpongan es irrelevante porque la naturaleza de las preguntas es diferente. Por favor vuelve a abrir. – JSideris

Respuesta

198

Corrija en todos los frentes. Fuera de una clase de caracteres (eso es lo que se llama "corchetes"), el guión no tiene ningún significado especial, y dentro de una clase de caracteres, puede colocar un guión como el primer o último carácter en el rango (por ejemplo, [-a-z] o [0-9-]). O escapó (por ejemplo, [a-z\-0-9]) para agregar "guión" a su clase.

Es más común encontrar un guion colocado primero o último dentro de una clase de personaje, pero de ninguna manera será linchado por hordas de colmillos furiosos por elegir escapar de él en su lugar.

(En realidad ... mi experiencia ha sido que muchas personas que no comprenden completamente la sintaxis emplean una gran cantidad de expresiones regulares. En estos casos, normalmente verá todo escapado (por ejemplo, [a-z\%\$\#\@\!\-\_]) simplemente porque el ingeniero no sabe lo que es "especial" y lo que no ... así que "juega a lo seguro" y ofusca la expresión con un montón de barras inversas excesivas. Hará usted mismo, sus contemporáneos y su posteridad un gran favor al tomar el tiempo para entender realmente la sintaxis de la expresión regular antes de usarla).

¡Gran pregunta!

+3

Punto interesante sobre el escape excesivo por aquellos que no entienden completamente y quieren "ir a lo seguro" – Medorator

+9

+1 por ayudarme a comprender la psique de "hordas de cuellos de botella furiosos": D –

+2

Una respuesta muy útil. Resulta que en Eclipse Luna, Java Linter se quejará si intentas escapar de él. – Keab42

5

Normalmente, siempre pondría el guión primero en la sección de coincidencia []. Por ejemplo, para combinar con cualquier alfanuméricos, incluyendo guiones escritos (el camino más largo), se usaría [-a-zA-Z0-9]

10

Fuera de las clases de caracteres, es convencional no escapar guiones. Si veía un guión escapado fuera de una clase de personaje, eso me sugeriría que fue escrito por alguien que no estaba muy cómodo con las expresiones regulares.

Dentro de las clases de caracteres, no creo que una forma sea convencional sobre la otra; en mi experiencia, es generalmente parece ser poner primero o el último, como en [-._:] o [._:-], para evitar la barra invertida; pero a menudo también lo he visto escapado, como en [._\-:], y no llamaría a eso un convencional.

Cuestiones relacionadas