Есть ли способ, чтобы точка (.) Соответствовала символу новой строки в регулярных выражениях C ++ TR1? - PullRequest
13 голосов
/ 13 января 2010

Я не могу найти что-либо относительно этого на http://msdn.microsoft.com/en-us/library/bb982727.aspx.

Может быть, я мог бы использовать '[^] +', чтобы сопоставить все, но это похоже на взлом?

Спасибо.

Ответы [ 4 ]

11 голосов
/ 13 января 2010

Boost.Regex имеет флаг mod_s, чтобы точки соответствовали новым строкам, но не является частью стандарта регулярных выражений TR1 . (насколько я вижу, он также недоступен в качестве расширения Microsoft)

В качестве обходного пути вы можете использовать [\s\S] (что означает совпадение с любым пробелом или любым не пробелом).

7 голосов
/ 13 января 2010

Поскольку регулярные выражения C ++, кажется, основаны на регулярных выражениях ECMAScript, вам может помочь ответ на недавний вопрос о том же в JavaScript.

[^] должно работать, но если вы хотите что-то более понятное и менее хакерское, вы можете попробовать (.|\n).

5 голосов
/ 13 января 2010

Один трюк, который используют люди, это класс символов, содержащий все, что не является нулевым символом. Нулевой символ выражается в шестнадцатеричном формате. Это выглядит примерно так:

[^\x00]+
1 голос
/ 13 января 2010

Вы можете переключиться на вариант регулярного выражения, не относящийся к ECMA (есть несколько флагов для контроля варианта регулярного текста) Любое регулярное выражение POSIX должно, если я правильно помню, совпадать с новой строкой ..

...