2010-06-09 10 views
28

¿Hay alguna razón por la cual Visual Studio usa una sintaxis tan extraña (por ejemplo, en el cuadro de diálogo buscar/reemplazar)?¿Por qué Visual Studio utiliza una sintaxis de expresiones regulares tan extraña?

En lugar de escribir \s*(\w+) = new Process\(\) tengo que escribir :b*{:a+} = new Process\(\).
Siempre estoy luchando con esta sintaxis, especialmente porque la sintaxis normal .NET es la anterior.

Esta es una comparación incompleta entre los dos sintaxis:

What   Visual .NET Comment 
       Studio 
---------------------------------------------------------------- 
Tab/Spaces  :b  \s Either tab or space 
Alphanumeric :a  \w ([a-zA-Z0-9]) 
Subexpression {}  () 
Substitution \n  $n Substitutes the substring matched 
           by a numbered subexpression. 
Backreference \n  \n Matches the value of a numbered 
           subexpression. 
---------------------------------------------------------------- 

ve aquí (Visual Studio, C#) para obtener más información.

¿Hay alguna razón para esto? ¿Es histórico? ¿Hay alguna ventaja?

+1

Enlace a la tabla de conversión de la sintaxis extraña a normal: https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx –

Respuesta

24

cito Coding Horror:

Sin embargo, usted se encontrará con una desagradable sorpresa cuando intenta realidad utilizar expresiones regulares para encontrar nada en Visual Studio. Aparentemente , el IDE de Visual Studio tiene su propia sintaxis de expresiones regulares bastardized . ¿Por qué? Quién sabe. Probablemente por razones de compatibilidad retroactiva arcana , aunque no tengo idea de por qué querría para mantener la locura perpetuamente. Evidentemente hace que las personas multimillonarios, así que quién soy yo para juzgar.

http://www.codinghorror.com/blog/2006/07/the-visual-studio-ide-and-regular-expressions.html

+3

gracias por el enlace - la primera captura de pantalla en el el artículo es genial: muestra lo que sucede cuando presiono el botón de flecha que siempre pasé por alto e ignoré ^^ – tanascius

1

Mi mejor y más sincera respuesta es porque son Microsoft, por lo tanto, pueden usar cualquier estándar que elijan. Algún programador en algún lugar probablemente decidió que la sintaxis anterior era más clara para ellos o más fácil de codificar y, por lo tanto, se convirtió en ley canónica.

5

Bueno, ellos trataron de hacer que sea "más fácil" de usar, al parecer, por un codificador C++.

Considérese que proporcionaron nuevas expresiones no estándar, como

 
C/C++ Identifier 
:i 
Matches the expression ([a-zA-Z_$][a-zA-Z0-9_$]*) 

Quoted string 
:q 
Matches the expression (("[^"]*")|('[^']*')). 

Creo que la razón por la que tiene una sintaxis completamente diferente es lo que el usuario expresión regular claramente ve su no-estándar y no es lo mismo como expresiones regulares normales .

Lo que es bueno. En general, es un buen motor de expresiones regulares y fácil de usar.

+1

No estoy seguro de si eso es algo bueno. Al menos estoy luchando mucho con esta sintaxis especial. Pero tengo que admitir que estoy programando mucho sin Visual Studio. Tal vez es más fácil cuando lo usa todos los días. Pero de cualquier manera, no importa qué motor regex use, parecen ser bastante similares, con la excepción de Visual Studio, donde todo es diferente:/ – tanascius

+0

Quiero buscar una ocurrencia de 2 a 5 letras particulares seguidas de 1 a 2 números . En reg "real" tal vez haga esto: <[a-z] {2,5} [0-9] {1,2}> pero en el estudio visual ... No puedo hacerlo. Micro $ oft debería al menos permitir el uso de POSIX reg ex. –

16

La buena noticia:

Since Visual Studio 2013, the search uses standard .NET regular expressions:

Visual Studio utiliza expresiones regulares de .NET Framework para buscar y reemplazar texto. Para obtener más información acerca de las expresiones regulares de .NET, vea .NET Framework Regular Expressions. Antes de Visual Studio 2012, Visual Studio usaba sintaxis de expresiones regulares en las ventanas Buscar y Reemplazar. Consulte Conversiones de expresiones regulares de Visual Studio para obtener una explicación sobre cómo convertir algunos de los símbolos de expresiones regulares personalizados más utilizados en las versiones de .NET.

Ya no es necesario aprender un extraño sabor de expresión regular.

+3

un enlace que requiere inicio de sesión me pone triste = ( – Maslow

+0

Las expresiones regulares .NET estándar aún usan sintaxis no estándar –

Cuestiones relacionadas