2012-04-17 8 views
21

necesito una expresión regular que coincida con una expresión que termina con un límite de palabras, pero que no considera el guión como un límite. es decir, conseguir todas las expresiones igualada porlímite de palabras regex excluyendo el guión

type ([a-z])\b 

pero no coinciden, por ejemplo,

type a-1 

reformular: quiero un equivalente del operador de límite de palabra \ b, que en lugar de utilizar la palabra clase de caracteres [A-Za-z0-9_], se utiliza la clase extendida: [A-Za-z0-9_-]

+0

¿Qué motor regex estás usando? ¿Es este .NET, javascript, etc.? – Jay

+0

@Jay: estoy usando .NET – eyaler

Respuesta

19

Se puede utilizar una búsqueda hacia delante para ello, el más corto sería utilizar una búsqueda negativa hacia delante:

type ([a-z])(?![\w-]) 

(?![\w-]) significaría "dejar el partido si el siguiente carácter está en \w o es un -".

Aquí es una opción que utiliza una búsqueda hacia delante normales:

type ([a-z])(?=[^\w-]|$) 

Usted puede leer (?=[^\w-]|$) como "única coincidir si el siguiente carácter es no en la clase de caracteres [\w-], o este es el final de la cuerda".

ver su funcionamiento: http://www.rubular.com/r/NHYhv72znm

+2

¿se puede hacer esto sin una mirada? – eyaler

4

que tenía un problema muy similar, excepto que no quería tener en cuenta el '*' como un personaje límite. Esto es lo que hice:

\b(?<!\*)[^\s\*]+)\b(?!*) 

Básicamente, si usted está en un límite de palabra, mirar hacia atrás un personaje y si no coinciden con el carácter anterior era un '*'. Si estás en el medio, no coincidas en un espacio o asterisco. Si está al final, asegúrese de que el final no sea un asterisco. En tu caso, creo que podrías usar \ w en vez de \ s. Para mí, esto funcionó en estas situaciones:

*word 
wo*rd 
word* 
+2

Su expresión regular tiene una sintaxis no válida – MaxZoom

Cuestiones relacionadas