2011-11-20 14 views
11

Come si crea un'espressione regolare che inizia a corrispondere dove inizia la ricerca?Come abbinare espressioni regolari all'indice iniziale?

In altre parole:

Qual è l'equivalente di \A che dice, "match all'inizio della ricerca, anche se non è l'inizio della stringa principale"?

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

@NullUserException ఠ_ఠ: Sono sta andando a fare questo in un lungo ciclo, in modo che sarebbe molto costoso. – Mehrdad

risposta

13

Quello che stai cercando è \G:

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

Questa è stata una sorpresa per me, in realtà. Sapevo di \G, ma in genere è descritto come un'ancora che corrisponde all'inizio dell'input o alla fine della corrispondenza di successo più recente, nessuna delle due si applica qui. Se si tratta di un'innovazione .NET, dovrebbero fare più rumore a riguardo; sembra che potrebbe essere molto utile.

MODIFICA: Vieni a pensarci, Java find(int) funziona allo stesso modo - l'ho anche usato ampiamente. Ma poi hanno aggiunto l'API "regions" in Java 5, che offre un controllo molto più fine, e ho dimenticato questo idioma. Non ho mai pensato di cercarlo in .NET.

+0

Non posso credere che sia twue! +1 – Mehrdad

+0

+1 Wow, l'hai trovato! E sembra che sia stato lì da [.NET 1.1] (http://msdn.microsoft.com/en-us/library/h5181w5w (v = VS.71) .aspx) – NullUserException

3

Ooooh ho appena ricordato qualcosa che avevo letto ~ 4-5 anni fa in un libro per quanto riguarda Regex.Match ...

I sovraccarichi non si comportano il modo in cui noi li aspettiamo a!

Il sovraccarico

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

specifica una stringa per la ricerca, mentre il sovraccarico di

Regex.Match(string input, int index) 

dettami meramente in cui la ricerca deve iniziare !

(L'un caso si lascia fuori a partire da un arbitrario posizione in un sottostringa, immagino.)

Spero che questo è illuminante per le persone ...

+0

+1. Sì, risulta 'nuovo Regex (@" \ A \ n "). Match ("! \ N ", 1, 2) .Success' è twue, anche. Quei piccoli diavoli ingannevoli! –