Почему Visual Studio использует такой странный синтаксис регулярных выражений
Есть ли причина, по которой Visual Studio использует такой странный синтаксис (например, в диалоговом окне поиска/замены)?
Вместо записи \s*(\w+) = new Process\(\)
мне нужно написать :b*{:a+} = new Process\(\)
.
Я всегда борется с этим синтаксисом - тем более, что обычный .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, С#) для Дополнительная информация.
Есть ли причина для этого? Это исторический? Есть ли преимущества?
Ответы
Ответ 1
Я цитирую Coding Horror:
Однако у вас неприятный удивление, когда вы пытаетесь на самом деле используйте регулярные выражения, чтобы найти все в Visual Studio. По всей видимости среда разработки Visual Studio имеет свои собственные синтаксис регулярных выражений. Зачем? Кто знает. Вероятно, для тайной обратная совместимость, хотя я понятия не имею, почему вы хотите вечно переносить безумие. Очевидно, это делает людей миллиардеров, так кого я должен судить.
http://www.codinghorror.com/blog/2006/07/the-visual-studio-ide-and-regular-expressions.html
Ответ 2
Хорошая новость:
Начиная с Visual Studio 2013 поиск использует стандартные регулярные выражения .NET:
Visual Studio использует регулярные выражения .NET Framework для поиска и замены текста. Дополнительные сведения о регулярных выражениях .NET см. В разделе "Регулярные выражения .NET Framework". Перед Visual Studio 2012 Visual Studio использовала специальный синтаксис регулярных выражений в окнах "Найти и заменить". См. "Преобразования регулярных выражений Visual Studio" для объяснения того, как преобразовать некоторые из наиболее часто используемых символов обычного выражения в версии .NET.
Не нужно больше изучать странный аромат регулярных выражений.
Ответ 3
Ну, они попытались сделать это "проще" для использования, похоже, для С++-кодера.
Предположим, что они предоставили новые нестандартные выражения, например
C/C++ Identifier
:i
Matches the expression ([a-zA-Z_$][a-zA-Z0-9_$]*)
Quoted string
:q
Matches the expression (("[^"]*")|('[^']*')).
Я думаю, что причина, по которой он имеет совершенно другой синтаксис, заключается в том, что пользователь регулярных выражений явно видит его нестандартное и не то же самое как нормальное регулярное выражение.
Это хорошо. В целом это хороший двигатель регулярных выражений и простой в использовании.
Ответ 4
Мой лучший и самый честный ответ заключается в том, что они Microsoft, поэтому они могут использовать любой стандарт, который они выбирают. Некоторый программист где-то, вероятно, решил, что вышеупомянутый синтаксис был более понятен для них или проще кодировать, и поэтому он стал каноническим законом.