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

Я ничего не мог найти по этому поводу на http://msdn.microsoft.com/en-us/library/bb982727.aspx.

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

Спасибо.

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

[^\x00]+

Ответ 4

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