Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> универсальный regexp url 
:(
    Опции темы
necrom
Дата 27.7.2011, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2011

Репутация: нет
Всего: нет



Помогите дописать универсальный regexp для проверки url.
Необходимо, чтобы регулярка искала все комбинации вида.
Код

Запрос                                              Результат1        Результат2
http://yandex.ru                              - yandex.ru         yandex.ru
http://yandex.ru/                            - yandex.ru         yandex.ru
http://yandex.ru/?q=search/                - yandex.ru         yandex.ru/?q=search


Но, не пропускала вот такие последовательности
Код

http://yandex.ru/?q=search/test

Текущий RegExp сейчас такой. Работает почти, как надо, но пропускает, последовательности которые описаны выше и не убирает слеши с конца.
Код

regUrl.set_expression("(?:http://)?/?(([_a-zA-Z\\d\\-]+(?:\\.[_a-zA-Z\\d\\-]+)+)/?([_a-zA-Z\\d\\-\\[\\]\\?\\.=%&;#]+)?)");


Это сообщение отредактировал(а) necrom - 27.7.2011, 20:49
PM MAIL   Вверх
rudvil
Дата 28.7.2011, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: 2
Всего: 3



Код

^http:\/\/(yandex\.ru(\/\?q=\w+)?)?\/?$

Эти принимает
Код

http://yandex.ru
http://yandex.ru/
http://yandex.ru
http://yandex.ru/
http://yandex.ru/?q=search
http://yandex.ru/?q=search/

Эти нет
Код

http://yandex.ru/?q=search/test
http://yandex.ru/?q=search/testasdasdadsasdasdasd

Результат в \1 или $1.
Пример работы этого regexp.

Это сообщение отредактировал(а) rudvil - 28.7.2011, 13:34
--------------------
xor
PM MAIL Skype   Вверх
bsa
Дата 28.7.2011, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



rudvil, вот только слову "универсальный" не соответствует
PM   Вверх
necrom
Дата 28.7.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2011

Репутация: нет
Всего: нет



Цитата(rudvil @ 28.7.2011,  13:31)
Код

^http:\/\/(yandex\.ru(\/\?q=\w+)?)?\/?$

Эти принимает
Код

http://yandex.ru
http://yandex.ru/
http://yandex.ru
http://yandex.ru/
http://yandex.ru/?q=search
http://yandex.ru/?q=search/

Эти нет
Код

http://yandex.ru/?q=search/test
http://yandex.ru/?q=search/testasdasdadsasdasdasd

Результат в \1 или $1.
Пример работы этого regexp.

Тут http://yandex.ru чисто для примера, там может быть любой домен. Не катит в общем, ещё есть варианты?

Это сообщение отредактировал(а) necrom - 28.7.2011, 21:56
PM MAIL   Вверх
rudvil
Дата 28.7.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: 2
Всего: 3



Цитата(bsa)

rudvil, вот только слову "универсальный" не соответствует

Цитата(necrom)

Тут http://yandex.ru чисто для примера, там может быть любой домен. Не катит в общем, ещё есть варианты?

делов то, поменять yandex на \w+
Код

^https?:\/\/(\w+(\.\w+)+(\/\?\w+=\w+)?)?\/?$

результат
--------------------
xor
PM MAIL Skype   Вверх
necrom
Дата 8.8.2011, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2011

Репутация: нет
Всего: нет



Хех почти, вот такие не ищет  smile 
Код

https://illegal.site.com/auto/?test=a

PM MAIL   Вверх
rudvil
Дата 8.8.2011, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: 2
Всего: 3



Цитата(necrom @ 8.8.2011,  03:40)
Хех почти, вот такие не ищет  smile 
Код

https://illegal.site.com/auto/?test=a

Код
^https?:\/\/(\w+(\.\w+)+(\/\w+)*(\/\?\w+=\w+)?)?\/?$

теперь ищет
--------------------
xor
PM MAIL Skype   Вверх
phprus
Дата 8.8.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: 1
Всего: 3



Нужно парсить просто URLы или доставать их из текста? Если парсить URLы, то может-быть проще воспользоваться готовой библиотекой, например http://code.google.com/p/google-url/ ?
PM MAIL WWW ICQ   Вверх
necrom
Дата 12.8.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2011

Репутация: нет
Всего: нет



Нужно парсить текст.
Немного доработал под себя спасибо, всем кто помогал.
Код

^(?:http:)?\/?\/?(([\w\-]+(?:\.\w+)*)((?:\/[\w\-]+)*?(?:\/(?:\w+(?:\.\w+)+)?(?:[\[\]\?\.\=%&;#]+\w+)*)?))?\/?$


Появилась не большая проблема, почему то boost выдаёт кривой результат, если нет обозначения начала и конца строки. В чём может быть проблема?

Код

    string url("http://Yandex.fdfdf.d1fdf/slesh-sd/kjkl.php=?ygfh-jhgjh");
    boost::regex regUrl;
    regUrl.set_expression("(?:http:)?/?/?([-\\w]+[\\.\\w]+)((?:/[-\\w]+)*(?:/(?:[-\\w]+[\\.\\w]+)?(?:[\\[\\]\\?\\.\\=\\-%&;#]+\\w+)+)?)?/?");

    boost::sregex_iterator xInvalidIt;
    boost::sregex_iterator i(url.begin(), url.end(), regUrl);
    if(i != xInvalidIt){
        cout << i->str(0) << endl;
        cout << i->str(1) << endl;
        cout << i->str(2) << endl;
        cout << i->str(3) << endl;
    }


Это сообщение отредактировал(а) necrom - 16.8.2011, 23:54
PM MAIL   Вверх
necrom
Дата 15.8.2011, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 21.2.2011

Репутация: нет
Всего: нет



Хелп, boost кодеры ) Ещё одна проблема, как сделать если в полностью текст до пробелов не совпадает, он его бы пропускал предположим идёт http://yandex.ru/?q=search/test обрамлённый двумя пробелами спереди и с зади, он не соответствует полностью патерну, он его пропускает.

Это сообщение отредактировал(а) necrom - 15.8.2011, 17:30
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.