Замена на подгруппу

Есть код на Lazarus с использованием библиотеки RegExpr и код, заменяющий повторяющиеся слова подряд без учета регистра. Не получается заменить, работает не так, подскажите, что я делаю не так.

program Project1;

uses
  RegExpr;

var
  f:textfile;
  buf, text, text_after:string;
  reg:TRegExpr;
begin

  AssignFile(f, 'test.txt');
  Reset(f);

  text:='';
  while not Eof(f) do
  begin
    readln(f, buf);
    text:=text+buf;
  end;

  buf:='';
  reg:=TRegExpr.Create;
  reg.Expression:='\b(\w+)(?:\s+\1\b)+';
  reg.ModifierI:=True;

  if (reg.Exec(text)) then
     text_after:=reg.Replace(text,'$1');

  CloseFile(f);
end.

Файл test.txt: 'hello hi hello Hello 123 321 you You the are'

Переменная после замены: 'hello hi $1 123 321 $1 the are'

Код на C++, делающий такие же действия, но работает:

#include <regex>
#include <iostream>
#include <fstream>

using namespace std;

string readf(const string& filename)
{
    ifstream file(filename);
    if (!file.is_open())
    {
        throw exception("File not foind!");
    }

    string text, buf;

    while (!file.eof())
    {
        getline(file, buf);
        text += buf;
    }

    file.close();
    return text;
}

int main()
{
    cout << "Filename: ";
    string filename;
    cin >> filename;

    string text = readf(filename);

    regex pat("\\b(\\w+)(?:\\s+\\1\\b)+", regex_constants::ECMAScript | regex_constants::icase);

    cout << "Text before: " << text << endl;
    text = regex_replace(text, pat, "$1");
    cout << "Text after: " << text;

    cin.get();
    cin.get();
    return 0;
}

Ответы (0 шт):