2011-09-08 15 views
5

Pracuję z następującego wyrażenia regularnego w języku C#Pierwsze zestaw "Nieokreślony []". Błąd w C#

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

i otrzymuję ten błąd:

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

Jestem rodzaj nowe do wyrażeń regularnych tak mnie poprawić jeśli się mylę. Wyrażenie regularne ma wyodrębnić adresy URL z dopasowywania tekstu jak:

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

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

+1

\ u0026 to NIE identyfikator Unicode, ale literał łańcuchowy, tj. Jak tekst znajduje się w pamięci - sześciocyfrowy ciąg znaków. – tunafish24

Odpowiedz

7

Musisz użyć dosłownie ciąg:

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

Edit: Jednak chciałbym zmienić regex

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

Potem jest cały mecz sam URL. Nie ma potrzeby przechwytywania podgrup.

+0

Próbowałem dosłownego/dosłownego ciągu siebie i twojej wersji ... ale to nawet nie skompilowałoby się w VS2008 Pro? Daje błąd składni. – tunafish24

+0

Po prostu uniknij cytatu z "" –

+0

po prostu wypróbowany: 'string reg = @ "(? <= [," "]) Url = ([^ \] +?) (? = \ U0026)"; Regex find = new Regex (reg); ' nadal otrzymujesz taki sam błąd "Nieokreślony zestaw"? – tunafish24

6

You "Uciekam z jednego z nawiasów z \], co oznacza, że ​​masz niezakończony [. to jest idealne dla .NET regexs, mam to wydrukowane na moim biurku. Całkowicie polecam! Aby dopasować \ chcesz \ \.

O tak, brakowało mi dosłowności bez pierwszej edycji. Idź na sugestię Tima, którą powiedziałbym.

Innym narzędziem online, które jest naprawdę przydatne do szybkiego testowania, jest Derek Slager's online tool.

Powiązane problemy