Многострочные регулярные выражения в Visual Studio
есть ли способ заставить Visual Studio выполнить регулярное выражение заменить несколько строк (пусть совпадение пересекает границы линии)? Я знаю, что есть много редакторов, которые я могу использовать для этого, но кажется странным, что эта функция была оставлена вне Visual Studio. Я что-то упустил?
5 ответов:
используйте диалоговое окно заменить в файлах Ctrl -Shift -H и однострочный вариант
(?s):(?s)start.*endнаходит
start two three endSingleline означает: каждый файл обрабатывается как одна строка, точка
.соответствует новой строке\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