Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Khelleos
38 / 38 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
#1

Исправить регулярку, чтобы в rgxm записывалось последовательно логин, пароль, адрес сервера, порт и имя потока - C++

20.04.2014, 20:23. Просмотров 308. Ответов 4
Метки нет (Все метки)

Пытаюсь распарсить выражение такого вида "rtsp://[<username>[:<password>]@]<server-address-or-name>[:<port>][/<stream-name>]"

C
1
result = std::regex_match(url, rgxm, std::regex("rtsp://(\\w*):*(\\w*)@*([a-zA-Z0-9.]*):*(\\d*)([/a-zA-Z0-9_.]*)"));
Но если отсутсвует логин и пароль, то не верно определяется адрес сервера (ip-address) (первые цифры идут в логин, пароль пустой и соотвестнно адрес не верно определен)
Как можно исправить регулярку, чтобы в rgxm записывалось последовательно логин, пароль, адрес сервера, порт и имя потока?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 20:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Исправить регулярку, чтобы в rgxm записывалось последовательно логин, пароль, адрес сервера, порт и имя потока (C++):

Нужно что бы пароль и имя записывались в файл, как исправить? - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace std; int...

Вводится строка, содержащая команду вида: ftp://логин:пароль@адрес_сервера. Написать программу, которая из введенной строки выделяет логин, пароль и а - C++ Builder
Вводится строка, содержащая команду вида: ftp://логин:пароль@адрес_сервера. Написать программу, которая из введенной строки выделяет логин,...

Задать IP адрес и порт сервера вручную - C# WCF
Добрый день! Пишу что-то типа чата. На localhost работает. Теперь делаю, чтобы на клиенте нужно было вводить IP адрес и порт сервера. ...

Создать класс user, который имеет логин, имя, телефон, email и пароль - C# ASP.NET
Привет всем! Помогите создать класс user, который имеет логин, имя, телефон, email и пароль Вот написал public class User { ...

С компа друга соседа того же провайдера можно войти в интернет? известен mac адрес логин и пароль? - Безопасность
С компа друга соседа того же провайдера можно войти в интернет? известен mac адрес логин и пароль!!!

Как получить данные с БД или сделать дамп с удаленного сервера зная логин/пароль - Firebird/InterBase
Здравствуйте! Я полный ноль в базах данных, так что прошу меня простить если задаю глупый вопрос. На удаленном сервер запущен interbase...

4
nmcf
6084 / 5395 / 1881
Регистрация: 14.04.2014
Сообщений: 22,399
20.04.2014, 21:48 #2
Там надо с условиями.
0
Khelleos
38 / 38 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
20.04.2014, 22:12  [ТС] #3
Сделал так пока-что
C++
1
2
3
4
5
6
7
    result = std::regex_match(cUrl, rgxm, std::regex("rtsp://((\\w*)(:(\\w*))?@)?(([0-9.]*)(:([0-9]*))?)([a-zA-Z0-9./]*)?"));
 
    printf("username   = %s\n", rgxm[2].str().c_str());
    printf("password   = %s\n", rgxm[4].str().c_str());
    printf("ip address = %s\n", rgxm[6].str().c_str());
    printf("port       = %s\n", rgxm[8].str().c_str());
    printf("stream     = %s\n", rgxm[9].str().c_str());
Либо отказаться от регулярки и парсить ручками, либо выделять регуляркой "логин:пароль@", "адресс:порт", "/имя потока". А потом уже парсить логин-пароль, адресс-порт.
0
nmcf
6084 / 5395 / 1881
Регистрация: 14.04.2014
Сообщений: 22,399
20.04.2014, 22:18 #4
Сделай 2 шаблона с именем и паролем и без них. Применяй в зависимости от присутствия символа @ в строке.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16711 / 6633 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
20.04.2014, 23:05 #5
Заморачиваться с реализацией регулярок в плюсах не особо хочется, но сама регулярка может выглядеть как-то так
C++
1
"/rtsp:\\/\\/(?P<username>.+?(?=[:@]))?(?::(?P<password>.+?(?=@))@)?(?P<server>[-_a-z]+|(?:\\d{1,3}\\.){4})(?::(?P<port>.+?(?=\\/|\\Z)))?(?:\\/(?P<stream>[-_a-z]+))?/i"
В пыхе это выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php header('Content-type: text/html;charset=utf-8'); 
 
$text = 'rtsp://foo:bar@localhost:3000/lol';
 
$regexp = '~rtsp://(?P<username>.+?(?=[:@]))?
(?::(?P<password>.+?(?=@))@)?
(?P<server>[-_a-z]+|(?:\\d{1,3}\\.){4})
(?::(?P<port>.+?(?=/|\\Z)))?
(?:/(?P<stream>[-_a-z]+))?~ix';
 
if(preg_match($regexp, $text, $matches))
    foreach($matches as $key => $val)
        if(is_string($key))
            echo $key, ' => ', $val, PHP_EOL;
Исправить регулярку, чтобы в rgxm записывалось последовательно логин, пароль, адрес сервера, порт и имя потока
0
20.04.2014, 23:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 23:05
Привет! Вот еще темы с ответами:

Как можно сделать, чтобы генерировал логин и пароль - PHP
Доброго времени суток. при первом входе через соц сеть запрашивается логин пароль и почта возможно ли сделать чтобы запрашивал только почту...

Как сделать чтобы ADOConnection не спрашивала логин и пароль - Delphi
Как сделать, чтобы при запуске программы ADOConnection не запрашивала логин и пароль для подключения к БД? Чтобы не выскакивало это окно

сделать чтобы на все сервисы был один логин и пароль - PHP
Посоветуйте как мне лучше сделать. У меня есть сайт и к нему прикреплены несколько сервисов со своеё регистрацией. Я хочу сделать чтобы на...

Socket. Отправка данных всем, кто знает адрес:порт сервера - C#
Здравствуйте, уважаемые формучане, возник вопрос, а можно ли сделать такой C#-сервер, который открывает порт у себя на компьютере и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru