2011-11-20 15 views
11

¿Cómo creo una expresión regular que comienza a coincidir donde comienza a buscar?¿Cómo hacer coincidir la expresión regular en el índice de inicio?

En otras palabras:

¿Cuál es el equivalente de \A que dice: "partido en el inicio de la búsqueda, incluso si no está en el principio de la cadena principal"?

new Regex(@"\A\n").IsMatch("!\n", 1); // Should be true, but is false 
+0

@NullUserException ఠ_ఠ: Soy va a hacer esto en un bucle largo, por lo que sería muy costoso. – Mehrdad

Respuesta

13

Lo que estamos buscando es \G:

new Regex(@"\G\n").IsMatch("!\n", 1); // It's twue, it's twue! 

Esto fue una sorpresa para mí, en realidad. Sabía acerca de \G, pero generalmente se describe como un ancla que coincide con el comienzo de la entrada o el final de la coincidencia exitosa más reciente, ninguna de las cuales se aplica aquí. Si se trata de una innovación .NET, deberían hacer más ruido al respecto; parece que podría ser muy útil.

EDIT: Ahora que lo pienso, el find(int) de Java funciona de la misma manera, incluso lo he usado extensamente. Pero luego agregaron la API de "regiones" en Java 5, que ofrece un control mucho más fino, y me olvidé de este modismo. Nunca pensé buscarlo en .NET.

+0

¡No puedo creer que sea twue! +1 – Mehrdad

+0

+1 ¡Guau, lo encontraste! Y parece que ha estado allí desde [.NET 1.1] (http://msdn.microsoft.com/en-us/library/h5181w5w (v = VS.71) .aspx) – NullUserException

3

Ooooh Acabo de recordar algo que había leído hace ~ 4-5 años en un libro con respecto a Regex.Match ...

Las sobrecargas no se comportan de la manera que esperamos que!

La sobrecarga

Regex.Match(string input, int index, int length) 

especifica una subcadena a buscar, mientras que la sobrecarga de

Regex.Match(string input, int index) 

simplemente dicta que la búsqueda debe comenzar !

(El único caso que deja fuera a partir de las una posición arbitraria en una subcadena, supongo.)

Hope esto es esclarecedor para la gente ...

+0

+1. Sí, resulta 'nueva Regex (@" \ A \ n "). Match ("! \ N ", 1, 2) .Success' también es twue. ¡Esos pequeños diablos astutos! –

Cuestiones relacionadas