Nano Hash - криптовалюты, майнинг, программирование

Избегайте совпадения $ с концом буфера с регулярным выражением boost partial_match

Я регулярно ищу файл с помощью cregex_iterator. У меня есть boost::regex_constants::match_partial и boost::regex_constants::match_not_eob, установленные в моих флагах соответствия, и у меня есть $ в конце моего регулярного выражения. Проблема в том, что $ кажется совпадающим с концом буфера. так как я ищу частичные совпадения в конце моего буфера, чтобы облегчить поиск файла, это не работает. Есть ли способ заставить $ не соответствовать концу буфера? Упрощенный тестовый пример ниже...

#include <iostream>
#include <boost/regex.hpp>

const char *buf =
R"V0G0N([2014-04-12 13:01:13.414+0100:0x00000134]: Arbitrary non matching line
[2014-04-12 13:01:14.570+0100:0x00000134]:DBLog: 'Incomplete)V0G0N";

const char *szRegex = "^\\[(.{23})(Z|[+|-][0-9]{2})[0-9x:]{11,13}\\]:DBLog: (.+)$";

int _tmain(int argc, char* argv[])
{
    char c;
    boost::regex::flag_type regex_flags = boost::regex_constants::normal | boost::regex_constants::perl;
    boost::regex_constants::match_flag_type match_flags =
        boost::regex_constants::match_default | boost::regex_constants::match_not_dot_newline | boost::regex_constants::format_perl |
        boost::regex_constants::match_partial | boost::regex_constants::match_not_eob;

    boost::regex pattern(szRegex, regex_flags);

    boost::cregex_iterator a(
        buf,
        buf + strlen(buf),
        pattern,
        match_flags);
    boost::cregex_iterator end;

    while (a != end)
    {
        if ((*a)[0].matched == false)
        {
            // Partial match, save position and break:
            std::cout << "Partial Match: " << std::string((*a)[0].first, (*a)[0].second) << std::endl;
            break;
        }
        else
        {
            std::cout << "Complete Match: " << std::string((*a)[0].first, (*a)[0].second) << std::endl;
        }
        // move to next match:
        ++a;
    }
    std::cout << "done!" << std::endl;
    std::cin >> c;
    return 0;
}

приводит к...

Complete Match: [2014-04-12 13:01:14.570+0100:0x00000134]:DBLog: 'Incomplete

Мне нужно, чтобы это рассматривалось как частичное совпадение.

01.08.2014

Ответы:


1

http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/ref/match_flag_type.html

здесь я, наконец, понял, что

match_not_eob

не применяется к '$'. Мне нужно было вместо этого использовать

match_not_eol
01.08.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..