2009-06-26 12 views
5

MSVS: ¿Dónde está la expresión regular ?

tengo código que estoy tratando de coincidir con una expresión regular en MSVS 2008, pero no puedo averiguar la expresión regular para ello. Tome el ejemplo clásico:Visual Studio Regex '?'

colou?r 

... que es una expresión regular que coincide con color o colour. Esto no coincide con MSVS. Refiriéndome al archivo de ayuda, no puedo encontrar ?.

Esto no sería un gran problema - que puede ser emulado con alternancia:

colo(u|)r 

Sin embargo, consigo ... lo que no es ... "La expresión no se encuentra agrupado ')'." . Curiosamente, MSVS tiene estos grupos alternativos (no estoy seguro de por qué ...) con llaves: "Error de sintaxis en el patrón"

colo{u|}r 

Lo que me da el error totalmente diferente de la que ..., No veo uno. Básicamente, ¿cómo hago un ?? Mi entrada real no es tan simple como el color/color, de lo contrario, simplemente lo falsificaría con (color|colour). Supongo que podría fingir, pero es una forma obtusa de hacerlo.


Probemos alternancia entonces ...

Ok, todavía no puedo hacerlo, incluso con la alternancia. Tengo las siguientes dos expresiones regulares:

 
^[A-Z]+\t[0-9]+\t[^\t]+ 

^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+ 

Las dos coinciden con dos juegos de líneas que coinciden, individualmente, con mi texto. (El primero coincide con parte de las líneas que responden a la segunda.)

Mi entrada es líneas de información de moneda:

 
BZD 084 Belize dollar 
CAD 124 Canadian dollar 
CDF 976 Franc Congolais 
CHE 947 WIR euro (complementary currency) 
CHF 756 Swiss franc 
CHW 948 WIR franc (complementary currency) 
CLF 990 Unidad de Fomento (funds code) 

(Hay pestañas, por ejemplo, entre el euro WIR y (moneda complementaria), pero no son siempre allí.)

Lógicamente, debe seguir ese combinan a

 
^[A-Z]+\t[0-9]+\t[^\t]+ 

^[A-Z]+\t[0-9]+\t[^\t]+\t[^\t]+ 

.you conseguir ... ^ [AZ] + \ t [0-9] + \ t ([^ \ t] + | [^ \ t] + \ t [^ \ t] +) ... que de alguna manera parece ser equivalente a la segunda expresión en el primer conjunto.

+0

¿Qué quieres decir con regex en Visual Studio? ¿En qué idioma real lo estás escribiendo? –

+2

@John Rasch: Quiere decir en la ventana Buscar/Reemplazar de Visual Studio. – Welbog

+0

@Welbog - bien, eso tiene sentido ahora –

Respuesta

4

Nuestra propia Jeff Atwood escribió sobre esto hace un tiempo. Básicamente, la implementación de expresiones regulares de Visual Studio es bastante no estándar y no hay una manera directa de hacer lo que se suele hacer con '?'. Tendrás que usar tu expresión {colour|color}.

+0

Gracias ... lo probé con alternancia, ver ediciones. – Thanatos

0

Las expresiones regulares en Visual Studio find no son compatibles? Vea el reference en MSDN.Usted mejor apuesta es probablemente el personaje alternancia

+0

Ese artículo parece ser el mismo que el archivo de ayuda, que como he mencionado, no es de ninguna ayuda. – Thanatos

0

Esto funciona:

colo(u)|()r 

por su ejemplo real, esto coincidirá con cada línea:

^[A-Z]+:b[0-9]+:b[^\t]+(\t[^\t]+)|() 
+1

creo que querías decir "colo (u |()) r". su consulta original dice "match 'colou' o 'r'" – Aaron

+0

Ambos métodos funcionan exactamente igual en Visual Studio. Inténtalo tú mismo. – Greg

0

¿Probaste con la ruta común más larga en el ¿derecho?

Por ejemplo, para el color y el color sería:

colo(ur|r) 

y 2 para sus expresiones regulares sería:

^[A-Z]+\t[0-9]+\t{[^\t]+|[^\t]+\t[^\t]+} 
1

Aunque no documentado, he encontrado que la cadena "()" coincidirá con la cadena vacía. Por ejemplo:

colo(u|())r 

Del mismo modo, probar

^[A-Z]+\t[0-9]+\t{[^\t]+(\t+[^\t]+|())} 

Con ese último caso, asegúrese de poner el suplente vacío cuerdas última para evitar una coincidencia parcial, o asegurarse de que virar en una token de final de línea '$' también.