2011-09-08 6 views
5

sto lavorando con i seguenti regex in C#Ottenere "Unminminated [] set". Errore in C#

Regex find = new Regex("[,\"]url(?<Url>[^\\]+)\\u0026"); 

e questo errore:

"System.ArgumentException: parsing "[,"]url([^\]+)\u0026" - Unterminated [] set. 

Sono un po 'una novità per le espressioni regolari in modo correggetemi se sbaglio. L'espressione regolare si suppone per estrarre gli URL dal confronto tra parole come:

, url = http: //domain.com \ u0026

"url = http: //hello.com \ u0026

+1

\ u0026 NON è un identificatore unicode, ma una stringa letterale, cioè come il testo è nella memoria, una stringa di sei cifre. – tunafish24

risposta

7

è necessario utilizzare una stringa verbatim:

Regex find = new Regex(@"[,""]url(?<Url>[^\\]+)\\u0026"); 

Edit: Comunque, mi piacerebbe cambiare il regex per

Regex find = new Regex(@"(?<=[,""]url=)[^\\]+(?=\\u0026)"); 

Poi l'intera partita è l'URL stesso. Non c'è bisogno di catturare un sottogruppo.

+0

Ho provato io stesso la stringa letterale/letterale e anche la tua versione ... ma non sarebbe nemmeno stata compilata in VS2008 Pro? Sta dando errore di sintassi. – tunafish24

+0

Basta sfuggire la citazione con "" –

+0

appena provato: 'string reg = @ "(? <= [," "]) Url = ([^ \] +?) (? = \ U0026)"; Regex find = new Regex (reg); ' continua a ricevere lo stesso errore "Insieme non terminato"? – tunafish24

6

È stai sfuggendo a una delle parentesi con \] che significa che hai un non terminato [.

Questo cheat sheet è ottimo per regex .NET, l'ho stampato sulla mia scrivania. Lo consiglio assolutamente! Per abbinare \ vuoi \ \.

Oh sì, mancava la mancanza di parola senza la prima modifica. Vai per il suggerimento di Tim, direi.

Un altro strumento online che è davvero utile per test rapidi è Derek Slager's online tool.