Как получить URL с помощью регулярных выражений C ++? - PullRequest
0 голосов
/ 11 июля 2019

Я не могу разобрать все URL-адреса из строки. Я хочу отправить все URL в массив.

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

void checkString(std::string x,std::regex e){
  std::smatch m;
  std::regex_search (x,m,e);
  std::cout<<m.position(0);
}
void run(void){
    std::regex e("((https)|(http))\:\/\/media.discordapp.net\/.*\.(((png)|(gif))|((jpeg)|(jpg)))");

    std::string example="dadasdasdhttps://media.discordapp.net/Js1VPuxC5xs.pngdsdhttps://media.discordapp.net/Js1VPuxC5xs.gifsdhttps://media.discordapp.net/Js1VPuxC5xs.jpegsddshttps://media.discordapp.net/Js1VPuxC5xs.jpg";

    checkString(example,e);
}    

Я ожидаю выхода:
https://media.discordapp.net/Js1VPuxC5xs.png
https://media.discordapp.net/Js1VPuxC5xs.gif
https://media.discordapp.net/Js1VPuxC5xs.jpeg
https://media.discordapp.net/Js1VPuxC5xs.jpg

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете сделать:

void checkString(std::string x,std::regex e){
    std::smatch m;

    while (regex_search(x, m, e))
    {
        std::cout << m.str() << '\n';
        x = m.suffix();
    }
}

int main(){
    std::regex e(R"((?:https|http):\/\/media\.discordapp\.net\/.*?\.(?:png|gif|jpeg|jpg))");

    std::string example="dadasdasdhttps://media.discordapp.net/Js1VPuxC5xs.pngdsdhttps://media.discordapp.net/Js1VPuxC5xs.gifsdhttps://media.discordapp.net/Js1VPuxC5xs.jpegsddshttps://media.discordapp.net/Js1VPuxC5xs.jpg";

    checkString(example,e);
} 

Демо

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