2011-09-08 14 views
5

estoy trabajando con las siguientes expresiones regulares en C#Obteniendo "Unterminated [] set". Error en C#

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

y conseguir de este error:

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

Soy una especie de nuevo a las expresiones regulares para corregirme si me equivoco. La expresión regular se supone que extraer las direcciones URL de coincidencia de texto como:

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

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

+1

\ u0026 NO es un identificador unicode, sino un literal de cadena, es decir, cómo está el texto en la memoria: una cadena de seis dígitos. – tunafish24

Respuesta

7

Es necesario utilizar una cadena literal:

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

Editar: Sin embargo, me gustaría cambiar la expresión regular a

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

Entonces todo el partido es la propia URL. No es necesario un subgrupo de captura.

+0

Probé literalmente y literalmente la cadena yo mismo y su versión ... ¿pero eso ni siquiera compilaría en VS2008 Pro? Da error de sintaxis – tunafish24

+0

Acaba de escapar la cita con "" –

+0

acaba de probar: 'string reg = @ "(? <= [," "]) Url = ([^ \] +?) (? = \ U0026)"; Regex find = new Regex (reg); ' obteniendo el mismo error de "conjunto sin terminar"? – tunafish24

6

Usted está escapando de uno de los corchetes con \] lo que significa que tiene un sin terminar [.

Este cheat sheet es ideal para .NET expresiones regulares, lo tengo impreso en mi escritorio. Lo recomiendo totalmente! Para que coincida \ usted quiere \ \

Oh sí, se perdió la falta de textualmente sin la primera edición. Ve por la sugerencia de Tim que diría.

Otra herramienta en línea que es muy útil para realizar pruebas rápidas es Derek Slager's online tool.

Cuestiones relacionadas