Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Nikitko_Cent
132 / 102 / 10
Регистрация: 27.10.2011
Сообщений: 653
Завершенные тесты: 2
#1

Регулярные выражения (ECMAScript) - C++

14.11.2015, 18:11. Просмотров 277. Ответов 8
Метки нет (Все метки)

Никак не могу разобраться с регулярными выражениями

Объясните, пожалуйста, на пальцах, что "делают" круглые скобки в регулярках

Ещё помогите составить шаблон для вот такой строки (желательно с объяснениями):
[любое количество пробельных символов]#R[любое количество пробельных символов]B|b[любое количество цифр (в том числе нулевое)][любое количество пробельных символов]\[любое количество пробельных символов]S|s[любое количество цифр (в том числе нулевое)]

Пример:
#R b01281/ S
#R B0243/S58671
Буду премного благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2015, 18:11     Регулярные выражения (ECMAScript)
Посмотрите здесь:

Регулярные выражения. - C++
Здравствуйте всем! Имеется массив строк. Надо написать программу с функцией реализующей выявления соответствия между шаблоном допустим...

Регулярные выражения в g++ - C++
Привет всем! этот пример взял из http://www.cplusplus.com/reference/regex/regex_search/ и скомпилировал g++ . #include <iostream> ...

Регулярные выражения - C++
Составить регулярное выражение, пропускающее строки, содержащие хотя бы по разу каждую из трех первых букв вашей фамилии(Например, фамилия...

Регулярные выражения - C++
Можете подсказать что это значит? "Max-Forwards*(\d{3,}|7)" я без понятия что это и откуда это( Добавлено через 4 минуты я уже...

Регулярные выражения с++ - C++
Пользователь должен ввести строки: фамилию(первая буква должна быть заглавной), дату рождения(по форме аа.аа.аааа), состояние здоровья(good...

Регулярные выражения - C++
Как записать строки у тегов <c></c> и <v></v>? <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet...

Регулярные выражения на C++ - C++
Здраствуйте, возникла необходимость использовать регурные выражения в Си++. Первое что пришло в голову переписать все на Qt например,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 226
Регистрация: 12.12.2009
Сообщений: 7,222
Записей в блоге: 1
Завершенные тесты: 1
14.11.2015, 19:33     Регулярные выражения (ECMAScript) #2
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
Объясните, пожалуйста, на пальцах, что "делают" круглые скобки в регулярках
Круглые скобки "захватывают" результат. Регулярки приминяются в двух случах - 1. проверить соответсвтует ли строка регулярному выражению и 2. найти что-то, что соответсвует этому регулярному выражению.
Во втором случае может потребоваться результат не всего регулярного выражения, а его части. В этом случае эту часть оборачивают в круглые скобки.

Добавлено через 4 минуты
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
[любое количество пробельных символов]#R[любое количество пробельных символов]B|b[любое количество цифр (в том числе нулевое)][любое количество пробельных символов]\[любое количество пробельных символов]S|s[любое количество цифр (в том числе нулевое)]
Bash
1
"[\\s+]#R[\\s+](?:B:b)[\\s*][\\s+]\\[\\s+](?:S|s)[\\s*]
писал на коленке, не проверял

Не по теме:

Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
желательно с объяснениями
Слегка не в том состоянии

Nikitko_Cent
132 / 102 / 10
Регистрация: 27.10.2011
Сообщений: 653
Завершенные тесты: 2
15.11.2015, 11:28  [ТС]     Регулярные выражения (ECMAScript) #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
Круглые скобки "захватывают" результат. Регулярки приминяются в двух случах - 1. проверить соответсвтует ли строка регулярному выражению и 2. найти что-то, что соответсвует этому регулярному выражению.
Во втором случае может потребоваться результат не всего регулярного выражения, а его части. В этом случае эту часть оборачивают в круглые скобки.
Спасибо. А можно ли сделать так, чтобы если строка подходит под шаблон, то после выполнения:

C++
1
2
std::smatch m;
std::regex_search(in, m, std::regex(tmpl));
В m не было этой строки целиком, а лишь указанные мной группы захвата?

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
Bash
1
[\\s+]#R[\\s+](?:B:b)[\\s*][\\s+]\\[\\s+](?:S|s)[\\s*]
Эта штука вообще вызывает эксцепшн.

Если кому интересно, то сделал вот так:
C++
1
[ |\\t]*#R[ |\\t]*([B|b][0-9]*)[ |\\t]*/[ |\\t]*([S|s][0-9]*)

Не по теме:

Добавлено через 1 минуту

Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:

Слегка не в том состоянии

Суббота, понимаю

S_el
2088 / 1595 / 305
Регистрация: 15.12.2013
Сообщений: 6,422
15.11.2015, 12:46     Регулярные выражения (ECMAScript) #4
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
В m не было этой строки целиком, а лишь указанные мной группы захвата?
Извлекайте индексированием нужные группы.
Nikitko_Cent
132 / 102 / 10
Регистрация: 27.10.2011
Сообщений: 653
Завершенные тесты: 2
15.11.2015, 13:42  [ТС]     Регулярные выражения (ECMAScript) #5
Цитата Сообщение от S_el Посмотреть сообщение
Извлекайте индексированием нужные группы.
Понял.

А как указать в шаблоне, что перед искомой подстрокой могут быть только пробельные символы?, т.е.

[любое количество ТОЛЬКО пробельных символов]#R[любое количество ТОЛЬКО пробельных символов]B|b[любое количество цифр (в том числе нулевое)][любое количество ТОЛЬКО пробельных символов]\[любое количество ТОЛЬКО пробельных символов]S|s[любое количество цифр (в том числе нулевое)]
S_el
2088 / 1595 / 305
Регистрация: 15.12.2013
Сообщений: 6,422
15.11.2015, 13:45     Регулярные выражения (ECMAScript) #6
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
А как указать в шаблоне, что перед искомой подстрокой могут быть только пробельные символы?
для обозначения пробельных символов - \s
Nikitko_Cent
132 / 102 / 10
Регистрация: 27.10.2011
Сообщений: 653
Завершенные тесты: 2
15.11.2015, 13:59  [ТС]     Регулярные выражения (ECMAScript) #7
Цитата Сообщение от S_el Посмотреть сообщение
для обозначения пробельных символов - \s
проблема в том, что если у меня перед искомой подстрокой будет, например :
"1 "
То такая строка будет попадать под шаблон, а мне этого не надо

Добавлено через 3 минуты
Т.е. фактически мне нужно сделать так, что если подстрока попадает под шаблон, приведённый мною ранее, то её префикс обязан быть пуст

Добавлено через 7 минут
Примеры:
#R b01281/ S
- Подходит
#R b01281/ S
- Подходит
1#R b01281/ S
- Не подходит
1#R b01281/ S
- Не подходит
1 #R b01281/ S
- Не подходит
1 #R b01281/ S
- Не подходит
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 226
Регистрация: 12.12.2009
Сообщений: 7,222
Записей в блоге: 1
Завершенные тесты: 1
15.11.2015, 14:34     Регулярные выражения (ECMAScript) #8
\s - 1 пробел
\s+ - любое кол-во пробелов
\s* - любое кол-во пробелов, в том числе ноль
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
Т.е. фактически мне нужно сделать так, что если подстрока попадает под шаблон, приведённый мною ранее, то её префикс обязан быть пуст
"^#R"
^ в данном случае означает начало строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2015, 16:50     Регулярные выражения (ECMAScript)
Еще ссылки по теме:

Регулярные выражения - C++
Доброй ночи! Использую вот такой код void INITDIALOG(void* p){ char* bufer = new char; server.GetLocList(bufer); char * t =...

Регулярные выражения - C++
Может кто нибудь подсказать реализацию регулярных выражений на С/С++?

Регулярные выражения - C++
Привет помогите составить регулярное выражение, чтобы парсить такую строку: , , результатом должно быть: a hello world any ...

регулярные выражения - C++
прочитал статю http://www.opennet.ru/base/dev/pcre_cpp.txt.html про регулярные выражения в c++ неужели там мноо кода нужно писать? ...

[C++] Регулярные выражения - C++
Знаю что в стандарте С нет регулярных выражений. Хочу попробывать собрать простую функцию поиска по шаблону регулярных выражений. ...


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

Или воспользуйтесь поиском по форуму:
Nikitko_Cent
132 / 102 / 10
Регистрация: 27.10.2011
Сообщений: 653
Завершенные тесты: 2
15.11.2015, 16:50  [ТС]     Регулярные выражения (ECMAScript) #9
Видимо, вот окончательный вариант:
C++
1
const std::regex rule2("^[[:space:]]*#R[[:space:]]+([B|b][0-9]*)[[:space:]]*/[[:space:]]*([S|s][0-9]*)");
Оставил [[:space:]] для наглядности
Yandex
Объявления
15.11.2015, 16:50     Регулярные выражения (ECMAScript)
Ответ Создать тему
Опции темы

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