увеличить регулярное выражение и диапазон символов

0

У меня есть следующий код:

#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" - это диапазон символов? Определяется ли это стандартом регулярного выражения? Кто прав?

  • 0
    Насколько я понимаю, если вы хотите литерал - в выражении в скобках это должен быть первый символ. Если это не первый символ, его следует экранировать с помощью \.
  • 1
    На самом деле, Википедия говорит, что - может быть первым или последним символом и трактоваться буквально.
Теги:
boost
boost-regex

1 ответ

0

в то время как http://www.regexr.com/ рассказывает, что все в порядке. Усиливает ли мысль, что ": -\s" - это диапазон символов?

Boost и regexr просто не используют тот же аромат regex. Вот почему вы видите разные результаты с тем же регулярным выражением. Regexr использует аромат, поставляемый с ActionScript. С другой стороны, поддержка поддерживает Perl, POSIX Basic and POSIX extended regexes syntax.

Определяется ли это стандартом регулярного выражения? Кто прав?

Опять же, все зависит от вкуса вашего регулярного выражения. Некоторый аромат может поддерживать одну функцию, а другой нет.

Если вы хотите протестировать свои регулярные выражения, прежде чем использовать их в своем коде, я предлагаю вам использовать bregextest.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню