2015-02-07 4 views
0

Я пытаюсь соответствовать всей MP3S ссылке в HTMLRegex найти mp3 файл HTML

ожидаемых выходного

http://mp3cofe.com/ariana-grande-weeknd-love-me-harder-andreevskiy-remix.mp3 
http://mp3cofe.com/listen/52d-remix.mp3 

получает выход

http://mp3cofe.com/ariana-grande-weeknd-love-me-harder-andreevskiy-remix.mp3" rel="nofollow" target="_blank" style="color:green;">Download</a</div><a href="http://mp3cofe.com/listen/52d-remix.mp3" 

код

#include <iostream> 
#include <string> 
#include <regex> 
int main(){ 
    std::string subject("<a href=\"http://mp3cofe.com/ariana-grande-weeknd-love-me-harder-andreevskiy-remix.mp3\" rel=\"nofollow\" target=\"_blank\" style=\"color:green;\">Download</a></div><a href=\"http://mp3cofe.com/listen/52d-remix.mp3\" rel=\"nofollow\" target=\"_blank\" style=\"color:green;\">Download</a> "); 
     std::regex re("(http:\/\/)(.*)(\.mp3\"\)"); 
     std::sregex_iterator next(subject.begin(), subject.end(), re); 
     std::sregex_iterator end; 
     while (next != end) { 
      std::smatch match = *next; 
      std::cout << match.str() << "\n"; 
      next++; 
     } 
return 0; 
} 

ответ

0

Потому что .* по умолчанию жадный. Он максимально подходит всем героям.

std::regex re("(http://)(.*?)([.]mp3\")"); 

Используйте ниже регулярное выражение, если вы не хотите, чтобы включить "<space> в последний.

std::regex re("(http://)(.*?)[.]mp3(?=\")"); 
+0

избежать обратной косой черты, если это необходимо .. –

+0

или использовать '\\ S *' вместо '(. *?)' –

+0

Почему downvote? –

Смежные вопросы