Есть ли способ заставить Visual Studio выполнить замену регулярного выражения для нескольких строк (пусть совпадение пересекает границы)? Я знаю, что есть много редакторов, которые я могу использовать для этого, но кажется странным, что эта функция была исключена из Visual Studio. Я что-то упускаю?
источник
end
), чтобы он не был жадным. то есть:start(.*\n)*.*?end
start
иend
. Если вы хотите найти следующуюend
версию(?s)start.*?end
, используйте нежадную версию:, илиstart(.*\n)*?.*?end
.(?s)
?Регулярные выражения изменились в Visual Studio 2013 . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx
Чтобы сопоставить выражение на двух строках, код теперь будет следующим:
StartOfExpression.*\r?\n.*EndOfExpression
источник
</label>.*\r?\n.*<div
где\r?\n
очевидная carriage_return-new_line и.*
для сопоставления возможных табуляции / пробеловЭто работает сегодня в Visual Studio 2012:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Посмотрите, как
(.*\n)+?
деталь соответствует нескольким линиям, не жадно.fooPatternToStart
- это какой-то шаблон регулярного выражения в вашей начальной строке, аbarPatternToEnd
ваш шаблон можно найти в другой строке ниже, возможно, на многих строках ниже ...Пример найден здесь .
Просто и эффективно :)
Примечание: до VS2012 работала схема:
fooPatternToStart.(.\n)+@.*barPatternToEnd
источник
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
работает поискlog
междуsprintf
и__func__
, спасибо! Tho ... кажется, это смотрит в бесконечность для этого ... если бы только был способ ограничить количество строкПримечание. В этом ответе используется синтаксис регулярного выражения, который использовался в Visual Studio до VS 2012 включительно. В VS 2013 и более поздних версиях синтаксис регулярного выражения был изменен.
Вы можете включить
\n
в выражение. В качестве примера, вот регулярное выражение, которое я использую для «очистки» автоматически сгенерированных сценариев SQL от всего, что не является хранимой процедурой (оно будет соответствовать текстовым блокам, которые начинаются со строки, содержащей «Object:», за которой следует что-то, что не является "StoredProcedure", затем сопоставление следующих строк до строки, состоящей из слова "GO"):/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
источник
вам может потребоваться использовать \ r \ n в конце вашего выражения.
источник
Нежадный многострочный захват любых символов, Visual Studio 2013+:
.*?\r?\n.*?
Жадная версия в ответе Джайлза Робертса.
источник
Для всех, кто приходит сюда во время поиска VS Code, я использую это, чтобы сопоставить что угодно из
script
любого места с двумя символами новой строки (исключая новые строки):script(.|\n)+?(?=\n\n)
заменить
script
и\n\n
сопоставить все между ними.источник