Увеличьте регулярное выражение cpp для поиска строк между %% с выводом, исключая сам символ% - PullRequest
0 голосов
/ 03 апреля 2019

У меня возникла проблема с регулярным выражением boost в cpp.Я хочу сопоставить строку типа «Hello% world% regex% cpp%», и ожидаемый вывод строки - world, cpp

Может кто-нибудь предложить регулярное выражение для этого

Спасибо Анил

Ответы [ 3 ]

0 голосов
/ 03 апреля 2019

Я лично предпочитаю "\\%([^\\%]*)\\%" (или как необработанную строку R"r(\%([^\%]*)\%)r")

Это не зависит от не жадных квалификаторов

Что по существу

  • один процентный символ \\%
  • любое количество непроцентных символов [^\\%]*
  • один процентный символ \\%

Я знаю, что этоtagged boost, но вот решение с помощью std :: regex

#include <string>
#include <regex>
#include <iostream>

int main()
{
    using namespace std;
    string source = "Hello %world%";
    regex match_percent_enclosed (R"_(\%([^\%]*)\%)_");
    smatch between_percent;

    bool found_match = regex_search(source,between_percent,match_percent_enclosed);
    if(found_match && between_percent.size()>1)
        cout << "found: \"" << between_percent[1].str() << "\"." << endl; 
    else
        cout << "no match found." << endl;

}
0 голосов
/ 03 апреля 2019

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

   %(.+?)%

Результат:

Match 1
1.  world
Match 2
1.  cpp
0 голосов
/ 03 апреля 2019

Вы можете использовать это регулярное выражение \%(.*?)\% наименьшая группа

Регулярное выражение онлайн: https://regex101.com/r/dSCE2a/2

А для кода с бустом

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

using namespace std;
int main()
{
    boost::cmatch mat;
    boost::regex reg( "\\%(.*?)\\%" );
    char szStr[] = "Hello %world% regex %cpp%";
    char *where = szStr;
    while (regex_search(where, mat, reg))
    {
        cout << mat[1] << endl; // 0 for whole match, 1 for sub
        where = (char*)mat[0].second;
    }
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...