Почему Visual Studio использует такой странный синтаксис регулярных выражений - PullRequest
29 голосов
/ 09 июня 2010

Есть ли какая-либо причина, по которой Visual Studio использует такой странный синтаксис (например, в диалоговом окне поиска / замены)?

Вместо записи \s*(\w+) = new Process\(\) Мне нужно написать :b*{:a+} = new Process\(\).
IЯ всегда борюсь с этим синтаксисом, особенно потому, что обычный синтаксис .NET является прежним.

Это неполное сравнение между двумя синтаксисами:

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

См. Здесь ( Visual Studio , C # ) для получения дополнительной информации.

Есть ли причины для этого?Это историческое?Есть ли преимущество?

Ответы [ 4 ]

24 голосов
/ 09 июня 2010

Я цитирую Coding Horror:

Однако вас ожидает неприятный сюрприз, когда вы пытаетесь использовать регулярные выражения, чтобы найти что-то в Visual Studio.Очевидно, Visual Studio IDE имеет свой собственный синтаксис регулярных выражений.Зачем?Кто знает.Вероятно, из-за непонятных причин обратной совместимости, хотя я понятия не имею, почему вы захотите постоянно продвигать безумие.Очевидно, это делает людей миллиардерами, поэтому кто я такой, чтобы судить.

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

17 голосов
/ 27 февраля 2014

Хорошие новости:

Начиная с Visual Studio 2013, при поиске используются стандартные регулярные выражения .NET :

Visual Studio использует регулярные выражения .NET Framework для поиска и замены текста. Дополнительные сведения о регулярных выражениях .NET см. В разделе Регулярные выражения .NET Framework. До Visual Studio 2012 Visual Studio использовал пользовательский синтаксис регулярных выражений в окнах «Найти и заменить». См. Раздел Преобразования регулярных выражений в Visual Studio для объяснения того, как преобразовать некоторые из наиболее часто используемых пользовательских символов регулярных выражений в версии .NET.

Больше не нужно изучать странный вкус регулярных выражений.

6 голосов
/ 21 июля 2011

Что ж, они пытались сделать его "проще" в использовании, похоже, для кодера C ++.

Учтите, что они предоставили новые нестандартные выражения, такие как

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

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

Iдумаю, причина в том, что у него совершенно другой синтаксис, заключается в том, что пользователь регулярного выражения ясно видит его нестандартный и не тот же , что и обычное регулярное выражение.

Что хорошо.В целом, это хороший движок регулярных выражений и простой в использовании.

1 голос
/ 09 июня 2010

Мой лучший и самый честный ответ - потому что они Microsoft, поэтому они могут использовать любой стандарт, который они выберут. Некоторые программисты, вероятно, где-то решили, что приведенный выше синтаксис более понятен для них или проще для кодирования, и поэтому он стал каноническим законом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...