2010-06-09 10 views
28

Czy istnieje jakikolwiek powód, dla którego Visual Studio używa tak dziwnej składni (na przykład w oknie dialogowym wyszukiwania/zamiany)?Dlaczego Visual Studio używa tak dziwnej składni regex?

Zamiast pisać \s*(\w+) = new Process\(\) muszę napisać :b*{:a+} = new Process\(\).
Zawsze zmagam się z tą składnią - zwłaszcza, że ​​normalna składnia .NET jest poprzednia.

Jest to niepełna Porównanie dwóch składni:

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. 
---------------------------------------------------------------- 

Zobacz tutaj (Visual Studio, C#), aby uzyskać więcej informacji.

Czy istnieje ku temu powód? Czy to jest historyczne? Czy jest jakaś zaleta?

+1

Link do tabeli konwersji od dziwnej do normalnej składni: https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx –

Odpowiedz

24

cytuję Coding Horror:

jednak jesteś w nieprzyjemnym zaskoczenia podczas próby faktycznie wyrażenia regularne użytku znaleźć coś w Visual Studio. Podobno Visual Studio IDE ma własną skróconą formułę wyrażeń regularnych . Dlaczego? Kto wie. Prawdopodobnie dla arcane z powodów kompatybilności wstecznej, , chociaż nie mam pojęcia, dlaczego chcesz, aby wiecznie przenosiło szaleństwo. Najwyraźniej to sprawia, że ​​ludzie są miliarderami , więc kim ja jestem, by sądzić.

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

+3

dzięki za link - pierwszy zrzut ekranu w Artykuł jest świetny - pokazuje, co się dzieje, gdy wciskam przycisk ze strzałką Zawsze przeoczyłem i zignorowałem ^^ – tanascius

1

Moja najlepsza i najszczersza odpowiedź brzmi: dlatego, że są Microsoft, więc mogą używać dowolnego standardu, który wybiorą. Jakiś programista prawdopodobnie zdecydował, że powyższa składnia jest dla nich czystsza lub łatwiejsza do kodowania i dlatego stała się prawem kanonicznym.

5

Dobrze, że starał się "łatwiejsze" w obsłudze, jak się wydaje, na C++ kodera.

Rozważmy zapewnili nowych wyrażeń niestandardowych, jak

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

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

Myślę, że powodem, że ma zupełnie inną składnię jest więc użytkownik regex wyraźnie widzi jego niestandardowe i nie ten sam jako normalnej regex .

Co jest dobre. W sumie jest to dobry silnik regex i łatwy w użyciu.

+1

Nie jestem pewien, czy to dobrze. Przynajmniej ja walczę z tą specjalną składnią. Ale muszę przyznać, że dużo programuję bez Visual Studio. Może jest łatwiej, gdy używasz go każdego dnia. Ale tak czy inaczej - bez względu na to, który aparat regex, którego używam, wydają się być bardzo podobne, z wyjątkiem Visual Studio, gdzie wszystko jest inne:/ – tanascius

+0

Chcę wyszukać wystąpienie od 2 do 5 poszczególnych liter, a następnie od 1 do 2 liczb . W "prawdziwym" regem mógłbym to zrobić: <[a-z] {2,5} [0-9] {1,2}> , ale w visual studio ... nie mogę tego zrobić. Micro $ oft powinno przynajmniej zezwalać na korzystanie z POSIX reg ex. –

16

Dobrą wiadomością:

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

Visual Studio używa wyrażeń regularnych .NET Framework, aby znaleźć i zastąpić tekst. Aby uzyskać więcej informacji na temat wyrażeń regularnych .NET, zobacz Wyrażenia regularne .NET Framework. Przed Visual Studio 2012 Visual Studio użyło niestandardowej składni wyrażeń regularnych w oknach Znajdź i zamień. Zobacz Wyrażenia regularne w programie Visual Studio w celu wyjaśnienia, jak przekonwertować niektóre z częściej używanych niestandardowych symboli wyrażeń regularnych do wersji .NET.

Już nie trzeba uczyć się dziwnego smaku regularnej ekspresji.

+3

Link, który wymaga logowania, sprawia, że ​​jestem smutny = ( – Maslow

+0

Standardowe wyrażenia regularne .NET nadal używają niestandardowej składni –

Powiązane problemy