¿Cómo reescribir el [a-zA-Z0-9!$* \t\r\n]
patrón para que coincida con el guión junto con los caracteres existentes?
¿Cómo reescribir el [a-zA-Z0-9!$* \t\r\n]
patrón para que coincida con el guión junto con los caracteres existentes?
Respuestas:
Escapa del guión.
[a-zA-Z0-9!$* \t\r\n\-]
ACTUALIZACIÓN :
No importa esta respuesta: puede agregar el guión al grupo, pero no tiene que escapar de él. En su lugar, vea la respuesta de Konrad Rudolph, que responde mucho mejor y explica por qué.
El guión suele ser un carácter normal en expresiones regulares. Solo si está en una clase de personaje y entre otros dos personajes, adquiere un significado especial.
Así:
[-]
coincide con un guion.[abc-]
partidos a
, b
, c
o un guión.[-abc]
partidos a
, b
, c
o un guión.[ab-d]
partidos a
, b
, c
o d
( sólo que aquí el guión indica un intervalo de caracteres).[a-c-e]
: esto simplemente no es válido en algunas especificaciones / motores de expresiones regulares. POSIX regex, por ejemplo, no lo permite.
Es menos confuso usar siempre un guión de escape, para que no tenga que ser posicionalmente dependiente. Eso es \-
dentro de la clase de caracteres entre corchetes.
Pero hay algo más a considerar. Algunos de esos caracteres enumerados posiblemente deberían escribirse de manera diferente. En algunas circunstancias, definitivamente deberían hacerlo.
Esta comparación de sabores de expresiones regulares dice que C♯ puede usar algunas de las propiedades Unicode más simples. Si está tratando con Unicode, probablemente debería usar la categoría general \p{L}
para todas las letras posibles y tal vez \p{Nd}
para números decimales. Además, si desea acomodar toda esa puntuación de guión, no solo GUIÓN MENOS, debe usar la \p{Pd}
propiedad. Es posible que también desee escribir esa secuencia de caracteres en blanco simplemente como \s
, asumiendo que no es demasiado general para usted.
En conjunto, eso resulta en un patrón de [\p{L}\p{Nd}\p{Pd}!$*]
coincidir con cualquier carácter de ese conjunto.
Probablemente usaría eso de todos modos, incluso si no planeaba lidiar con el conjunto completo de Unicode, porque es un buen hábito para adquirir y porque estas cosas a menudo crecen más allá de sus parámetros originales. Ahora, cuando lo levante para usarlo en otro código, seguirá funcionando correctamente. Si codifica todos los caracteres, no lo hará.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] + y también [az-0-9] + son todos iguales. El guión entre dos rangos considerados como un símbolo. Y también [a-z0-9 - + ()] + esta expresión regular permite guión.
use "\ p {Pd}" sin comillas para coincidir con cualquier tipo de guión. El carácter '-' es solo un tipo de guión que también es un carácter especial en Regex.