У меня есть следующий код:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
const std::string input_data("2014-02-20 12:32:15");
const boost::regex reg_exp("[-:\\d\\s]+");
boost::smatch results;
std::cout << boost::regex_match(input_data, results, reg_exp) << '\n';
}
Вывод
1
Если я изменю регулярные выражения из
"[-:\\d\\s]+"
в
"[\\d:-\\s]+"
этот код выведет "0", а http://www.regexr.com/ расскажет, что все в порядке. Усиливает ли мысль, что ": -\s" - это диапазон символов? Определяется ли это стандартом регулярного выражения? Кто прав?
в то время как http://www.regexr.com/ рассказывает, что все в порядке. Усиливает ли мысль, что ": -\s" - это диапазон символов?
Boost и regexr просто не используют тот же аромат regex. Вот почему вы видите разные результаты с тем же регулярным выражением. Regexr использует аромат, поставляемый с ActionScript. С другой стороны, поддержка поддерживает Perl, POSIX Basic and POSIX extended regexes syntax
.
Определяется ли это стандартом регулярного выражения? Кто прав?
Опять же, все зависит от вкуса вашего регулярного выражения. Некоторый аромат может поддерживать одну функцию, а другой нет.
Если вы хотите протестировать свои регулярные выражения, прежде чем использовать их в своем коде, я предлагаю вам использовать bregextest.
-
в выражении в скобках это должен быть первый символ. Если это не первый символ, его следует экранировать с помощью \.-
может быть первым или последним символом и трактоваться буквально.