Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > улучшение regex


Автор: niro 7.11.2007, 17:32
Имеется небольшой regex для выковыривания ссылок: 
Код

regex ahref("<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"", boost::regex::normal | boost::regbase::icase);

и принимает 
Код
<a href="url">...</a>

Но если имеется html вида
Код

...
<a href=some.url>...</a>
<a href = some.url>...</a>
...

То он его не видит. Сам я плохо разбираюсь в regex, гугл немного помог с данной темой указав на 
Код

href\s*=\s*(?:(?:\"(?<url>[^\"]*)\")|(?<url>[^\s*] ))

который по идее может работать как мне необходимо, но увы boost его не может осилить. 
Спасибо

Автор: Alek86 7.11.2007, 19:10
проверить не могу, ибо либ буста у меня нету, но попробуй строку
"<\\s*A\\s+[^>]*href\\s*=\\s*\"([^\"]*)\"" замени на 
"<\\s*A|a\\s+[^>]*href\\s*=\\s*\"([^\"]*)\""

а, вообще, если ты regex хоть чуток знать хочешь, вот тебе ключ к расшифровке:
http://boost.org/libs/regex/doc/syntax_perl.html#Perl

Автор: niro 7.11.2007, 19:58
Alek86, Увы, но ваш пример не работает.

Автор: Alek86 7.11.2007, 20:00
был бы буст откомпиленный, я б помог. а так - звыняй, лень компилировать smile

Автор: Alek86 7.11.2007, 20:26
держи, вроде рабочая, хотя не на 100%

"<\\s*(A|a)\\s+[^>]*?href\\s*=\\s*\"?([^(\\s|>|\")]*)"

pressive хорош тем, что его компилить не надо smile

Автор: niro 7.11.2007, 20:32
действительно не на 100% но все же, Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)