Мне не удается использовать обратные ссылки в регулярном выражении на С++. Попробовав более эзотерические вещи, я попробовал этот простой скрипт на gcc 4.8.1:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
regex e("(..)\\1");
string s("aaaa");
if (regex_match(s,e))
cout << "match" << endl;
return 0;
}
но это выдает ошибку времени выполнения. Я пробовал различные флаги в regex_constants, такие как ECMAScript
или grep
, но безрезультатно. Что не так с этим способом использования обратных ссылок в механизме регулярных выражений С++?
Просто чтобы убедиться, что я не пропустил что-то тривиальное, я попробовал это на Java.
class TestIt
{
public static void main (String[] args) throws java.lang.Exception
{
final String s = "aaaa";
final String e = "(..)\\1";
if (s.matches(e))
System.out.printf("match");
}
};
и, очевидно, он печатает match
, как и ожидалось, что обнадеживает.