Многострочные регулярные выражения в Visual Studio
есть ли способ заставить Visual Studio выполнить регулярное выражение заменить несколько строк (пусть совпадение пересекает границы линии)? Я знаю, что есть много редакторов, которые я могу использовать для этого, но кажется странным, что эта функция была оставлена вне Visual Studio. Я что-то упустил?
5 ответов:
используйте диалоговое окно заменить в файлах Ctrl -Shift -H и однострочный вариант
(?s)
:(?s)start.*end
находит
start two three end
Singleline означает: каждый файл обрабатывается как одна строка, точка
.
соответствует новой строке\n
. Недостаток: вы должны использовать Найти Все и замените все, или замените вручную. Найти дальше не получится.для немодального диалога Ctrl -H и найти далее, использовать
(.*\n)*
чтобы соответствовать любому количеству строк:start(.*\n)*.*end
в любом случае, вы можете заменить свои выводы несколькими строками, вставив
\n
.
регулярные выражения изменились в Visual Studio 2013. https://msdn.microsoft.com/en-us/library/2k3te2cs (v = против 120). aspx
чтобы соответствовать выражению в двух строках, теперь код будет:
StartOfExpression.*\r?\n.*EndOfExpression
это работает сегодня в Visual Studio 2012, так:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
посмотреть, как
(.*\n)+?
часть делает матч через несколько строк, не жадный.fooPatternToStart
это некоторый шаблон регулярных выражений на вашей стартовой линии, в то время какbarPatternToEnd
- Это ваш шаблон, чтобы найти на другой строке ниже, возможно, много ниже линии...пример здесь.
простой и эффективный :)
Примечание: до в VS2012, шаблон, который работал:
fooPatternToStart.(.\n)+@.*barPatternToEnd
Примечание: этот ответ использует синтаксис регулярных выражений, используемый в Visual Studio до и включая VS 2012. В VS 2013 и более поздних версиях синтаксис регулярных выражений изменился.
Вы можете включить
\n
в выражении. Например, вот регулярное выражение, которое я использую для" очистки " автоматически сгенерированных сценариев SQL от всего, что не является хранимой процедурой (оно будет соответствовать текстовым блокам, которые начинаются со строки, содержащей "Object:", за которой следует что-то, что не является "StoredProcedure", а затем соответствует следующие строки до строки, состоит из слова "GO"):/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n