Подтвердить что ты не робот

Соответствие "начало строки" с использованием библиотеки регулярных выражений libС++ (С++ 11)

Я хотел бы совместить все строки, начинающиеся с данного слова, например iheap. Если я не ошибаюсь, регулярное выражение (в синтаксисе ECMAScript) "^iheap.*" должно сделать трюк. Однако, когда я тестировал это на С++ 11, используя библиотеку libС++ regex, сопоставляется только первая строка. Таким образом, "^...", похоже, соответствует началу ввода вместо начала строки.

Вот пример:

#include <string>
#include <regex>
#include <iostream>

using namespace std;

int main() {
        regex rx("^iheap.*");
        string s = "iheap says hello.\niheap says hello again.\n";
        cout << s << regex_replace(s, rx, "IHEAP");
        return 0;
}

Вывод:

iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.

Является ли это ошибкой libС++ или я делаю что-то неправильно? Спасибо!

Примечание. Я использую Mac OS X Mountain Lion и Apple LLVM Compiler 4.0 (в основном снимок clang 3.1 SVN).

4b9b3361

Ответ 1

Я просмотрел все соответствующие стандарты, и, насколько я могу судить, ^ соответствует только началу строки, а не новой строке, если движок не находится в многострочном режиме. Механизм по умолчанию ECMA-262 По умолчанию двигатель не находится в многострочном режиме, и я не вижу способа перевести его в многострочный режим, используя std С++.

Все сказанное, если кто-то может указать мне на нормативный текст, который говорит по-другому, я рассмотрю этот отчет об ошибке и сделаю все возможное, чтобы исправить его.