2016-08-13 2 views
1

Я хочу признать несколько строк в текстовом файле с помощью регулярных выражений, но алгоритм regex_match не соответствует ни одной строке, даже если я использую регулярное выражение покровителя («*»)алгоритм regex_match не соответствует в файле

string dirin = "/home/user/in.srt"; 
string dirout = "/home/user/out.srt"; 
ifstream in(dirin.c_str()); 
ofstream out(dirout.c_str()); 

string line; 
// regex patron("(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})\\s-->\\s(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})"); 
regex patron(".*"); 
smatch m; 
while (getline(in, line)) { 
    if (regex_match(line, m, patron)) { 
    out << "ok"; 
    }; 
    out << line; 
} 
in.close(); 
out.close(); 

Код всегда печатает строку строки в файле out.srt, но никогда не будет содержать строку «ok» внутри if (regex_match (line, m, patron)). я тестирую его следующими строками

00: 01: 00708 -> 00: 01: 01800

Ты смотришь на эту реку

00: 01: 02,977 -> 00: 01: 04,706

нежно течет.

00: 01: 06213 -> 00: 01: 08.238

Вы заметили, что листья

+0

Предполагаем ли мы догадываться, что вы пытаетесь сопоставить? –

+0

Я хочу совместить с прокомментированной строкой, но doen't соответствует любой строке –

+0

@DiegoSilvera - не может воспроизвести: с вашим кодом, вся строка (тоже пустая) сгенерирует «ok» – max66

ответ

1

Обратите внимание, что getline() читает строку с задней возврата каретки CR, и обратите внимание, что шаблон ECMAScript . не соответствует символу CR, считая его символом конца строки.

regex_match требует, чтобы целая строка соответствовала шаблону.

Таким образом, вам необходимо учесть дополнительный возврат каретки в конце рисунка. Вы можете сделать это путем добавления \r? или \s* в конце шаблона:

regex patron("(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})\\s-->\\s(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})\\s*"); 

или

regex patron(".*\\s*"); 

Кроме того, рассмотреть возможность использования сырья строковые литералы, если ваш C++ версия позволяет это:

regex patron(R"((\d{2}):(\d{2}):(\d{2}),(\d{3})\s-->\s(\d{2}):(\d{2}):(\d{2}),(\d{3})\s*)"); 
+1

, что было проблемой, спасибо –

Смежные вопросы