2016-01-28 2 views
3

Мне нужно заменить следующий шаблон на несколько файлов.Многострочное регулярное выражение в VS2015 или NP ++

this\.dialogs = {.*};

Это прекрасно работает, когда я установил single line флаг здесь: https://regex101.com/r/dF2yG3/2

Однако я не могу получить эту работу в редакторе, например VS или Notepad ++, это будет соответствовать только одну строку ,
Как изменить регулярное выражение или установить флаги в любом из этих редакторов, чтобы я мог использовать его в нескольких строках?

+0

* '.' соответствует строка * в Notepad ++. –

+1

Выполняет ли это '.dialogs = {(. | \ N) *};' работа? –

+0

@StevenDoggart: Это очень плохая конструкция. Очень неэффективно. –

ответ

3

Примечание вы хотите использовать только

(?s)this\.dialogs = \{.*\}; 

, если вы хотите, чтобы соответствовать строки из this.dialogs = { до последнего}.

Чтобы соответствовать только до ближайшего }; используйте

(?s)this\.dialogs = \{.*?\}; 

(?s) встроенный модификатор заставляет точку, чтобы соответствовать любому символу inlcuding строки.

enter image description here

В Notepad ++, вы можете использовать . соответствует новой строки в Notepad ++ вариант в Найти и заменить диалог вместо (?s).

enter image description here

В Visual Studio 2015 (и в VS2012, VS2013, тоже), вам нужно использовать

this\.dialogs = {[\s\S\r]*?}; 

, чтобы соответствовать строкам из this.dialogs = { до ближайшего };

enter image description here

+0

Теперь, я думаю, этого достаточно. Если вам нужно сопоставить сбалансированный '{}', вам нужно будет использовать выражение 'this \ .dialogs = (\ {(?> [^ {}] | (? 1)) * \} ;;' в Notepad ++. VS find и replace не поддерживает сбалансированные конструкции. –

0

Побег скобок и активировать . matches newline В блокнота:

this\.dialogs = \{.*\};

enter image description here

Или лучше использовать this\.dialogs = \{[^}]*\};

Смежные вопросы