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

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

Войти
Регистрация
Восстановить пароль
 
Колямбий
7 / 7 / 0
Регистрация: 18.12.2011
Сообщений: 137
#1

Составить регулярное выражение - C++

22.04.2013, 12:58. Просмотров 382. Ответов 7
Метки нет (Все метки)

Нужно составить регулярку:
проверить является ли строка индентификатором в C++ длиной не более 33 символов. Считается что индентификатор состоит из английских букв, цифр и символов "_", причем первым символом может быть либо буква либо подчеркивание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 12:58     Составить регулярное выражение
Посмотрите здесь:

Составить регулярное выражение - C++
Здравствуйте, помогите пожалуйста составить регулярное выражение для поиска фамилии и инициалов, например: Иванов И. И. Всё, что я смог...

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

Составить регулярное выражение, которое будет анализировать переменные - C++
Здравствуйте! Условие задачи: На вход программы подается текстовый файл (с именем INPUT.TXT), содержащий только описания...

Составить регулярное выражение, пропускающее строки, являющиеся целыми числами в заданном диапазоне - C++
Ребя помогите пожалуйста. Я ничего не понимаю из того что ниже написано, а лабораторную по теории автоматов сдать надо! Для каждого из...

Регулярное выражение - C++
Дана последовательность (-1.2+3.0)+2-8/6. Надо разбить строку на символы и числа. Как нужно отредактировать этот шаблон, чтобы число с...

Регулярное выражение - C++
Добрый день! Помогите расшифровать регулярное выражение, что оно ищет. (;.*|.*|)+

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
22.04.2013, 13:06     Составить регулярное выражение #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
#include <boost/xpressive/xpressive.hpp>
 
bool is_indicator(const std::string& value)
{
   using namespace boost::xpressive;
 
   auto underscore(as_xpr("_"));
   sregex re = (alpha | underscore) >> -repeat<0, 32>(_w);
   return regex_match(value, re);
}
 
int main()
{
   std::cout << is_indicator("_hello1") << std::endl;
   std::cout << is_indicator("1_hello") << std::endl;
   std::cout << is_indicator("h_e_l_") << std::endl;
   std::cout << is_indicator("_") << std::endl;
   std::cout << is_indicator("helloworldandthisisnicedayhereyess") << std::endl;
}
Bash
1
2
3
4
5
6
./new
1
0
1
1
0
Колямбий
7 / 7 / 0
Регистрация: 18.12.2011
Сообщений: 137
22.04.2013, 13:24  [ТС]     Составить регулярное выражение #3
ForEveR, спасибо большое, а просто регулярное выражение типа ^([0-1]\d... и так далее, как сделать?

Добавлено через 5 минут
нашел такие выражения:
[_a-zA-Z][_a-zA-Z0-9]*
([a-zA-Z_$][a-zA-Z0-9_$]*)

но они вроде не учитывают что первый символ может быть подчеркиванием либо буквой, как переделать под это их?

Добавлено через 1 минуту
и как еще размер указать в 33 символа?
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.04.2013, 13:25     Составить регулярное выражение #4
Попробуйте так: [:alpha:]\w{1,32}
Колямбий
7 / 7 / 0
Регистрация: 18.12.2011
Сообщений: 137
22.04.2013, 13:29  [ТС]     Составить регулярное выражение #5
Цитата Сообщение от yuron_477 Посмотреть сообщение
[:alpha:]
тут регулярку написать нужно?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
22.04.2013, 13:32     Составить регулярное выражение #6
[_a-zA-Z][_a-zA-Z0-9]*
([a-zA-Z_$][a-zA-Z0-9_$]*)

Оба учитывают. Эквивалентно

Один _ или a-z или A-Z и 0 или больше _ | a-z | A-Z | 0-9 (во втором случае еще зачем-то добавляется конец строки).
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.04.2013, 14:35     Составить регулярное выражение #7
Колямбий, а так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
#include <boost/regex.hpp>
 
bool is_indicator(const std::string& value)
{
    //boost::regex reg("([:alpha:]|_)(\\w){0,32}");
    boost::regex reg("[A-Za-z_](\\w){0,32}");
    return boost::regex_match(value, reg);
}
 
int main()
{
   std::cout << is_indicator("_hello1") << std::endl;
   std::cout << is_indicator("1_hello") << std::endl;
   std::cout << is_indicator("h_e_l_") << std::endl;
   std::cout << is_indicator("_") << std::endl;
   std::cout << is_indicator("helloworldandthisisnicedayhereyess") << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 17:34     Составить регулярное выражение
Еще ссылки по теме:

Регулярное выражение - C++
Пишу под Qt и получил такую проблему. Почему данный код не выводит чего либо в консоль?: QString data(&quot;&lt;div class=\&quot;text\&quot;&gt;xxx:&lt;br&gt;ну...

Не работает регулярное выражение - C++
Здравствуйте, есть метод с регулярным выражением: bool Library::ValidGenreCode(std::string genreCode) { const std::string genreCodeExp...

Регулярное выражение boost::regex - C++
Здравствуйте форумчане. Не получается написать регулярное выражения для разбора такой строки: g=p1#s=p1,p2#t=p1 g, s, t - имена...

Вырезать символ из строки, регулярное выражение - C++
Подскажите пожалуйста как из строки std::string s = &quot;string\.txt&quot;; вырезать сиивол &quot;\&quot;


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

Или воспользуйтесь поиском по форуму:
Колямбий
7 / 7 / 0
Регистрация: 18.12.2011
Сообщений: 137
22.04.2013, 17:34  [ТС]     Составить регулярное выражение #8
всем спасибо, сделал сдал)))
Yandex
Объявления
22.04.2013, 17:34     Составить регулярное выражение
Ответ Создать тему
Опции темы

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