Есть ли способ, чтобы точка (.) Соответствовала новой строке в регулярных выражениях С++ 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 должно, если я правильно помню, сопоставить новую строку с .
.