Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27

Регулярные выражения: проверка на MAC-адрес

03.12.2017, 00:34. Показов 3540. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Изучаю с++, начал тему регулярные выражения, и немного не понятна эта тема, решил для себя реализовать пару задач, одна из них это проверка мак адреса, то есть пользователь вводит что то похожее на мак адрес и ему должен прилететь ответ, правильно ли он написал его. Как я полагаю должно быть вроде 6 "правил" и одно из них это то, что мак не может начинаться с большой буквы (Вроде как) .
Мне бы объяснить немного, если можно код с комментариями, если не выйдет, то хотя бы мысль с чего и как начать.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2017, 00:34
Ответы с готовыми решениями:

Адрес проживания и регулярные выражения
Добрый день! Помогите пожалуйста составить регулярное выражение. Есть строка с адресом, в ней нужно найти корпус или строение....

Регулярные выражения(проверка слова)
Добрый день. Понадобилось использовать регулярные выражения, а я ранее ими не пользовался. Стоит задача: нужно проверить строку, в...

Регулярные выражения проверка на число
Здравствуйте! Помогите пожалуйста решить задачу выбора из строки только цифр и одной первой точки. К примеру есть строка...

18
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2017, 08:50
Это же просто шестнадцатеричные числа. Регистр не важен.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
03.12.2017, 12:08  [ТС]
Но как сделать проверку, что все введено верно? до каждого двоеточия
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2017, 12:20
Какого двоеточия? Покажи, что у тебя есть.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
03.12.2017, 12:31  [ТС]
Поправка, не двоеточия, а тире. Вечером буду скину, что есть. Я имел ввиду, чтобы была полная проверка правильности мак адреса, любое отклонения, сообщения об ошибке.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2017, 12:44
Шаблон составь типа
C++
1
"[0-9a-f]{2}-[0-9a-f]{2}"
1
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
06.12.2017, 01:24  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string q;
    cout << "Введите адрес" << q << endl;
    getline(cin,q);
    if (regex_match(q, regex{ "[0-9a-f]{2}-[0-9a-f]{2}" }))
    {
        cout << "все верно" << endl; 
    }
    else
        cout << "error" << endl;
    
    return 0;
}
Что здесь не так? Пробую комбинацию к примеру: 44-4x-re-43-r3-r2 - Кидает на else, ошибка в шаблоне или я не так что либо сделал?

Добавлено через 6 минут
up*
Нашел ошибку, не то условия поставил, с regex_search все вроде как работает. В итоге вот так будет:
C++
1
if (regex_search(q, regex{ "[0-9a-f]{2}-[0-9a-f]{2}" }))
У меня еще 1-2 вопрос, в мак-адресе точно нет никаких исключений? Например, что 2 буквы не может быть заглавная и так далее? И можно ли как то оптимизировать код?

Добавлено через 9 минут
up**
C++
1
"[0-9a-f]{2}-[0-9a-f]{2}"
- Можно расшифровку шаблона?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.12.2017, 08:50
6 групп должно быть, две для примера. И не search, а match.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
06.12.2017, 10:58  [ТС]
Что за 6 групп?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.12.2017, 11:14
Mac-адрес из шести частей состоит, соответственно и шаблон тоже. В моём примере две части. Описание языка regex'а посмотри.
1
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
06.12.2017, 13:41
C++
1
"[0-9a-f]{2}(-[0-9a-f]{2}){5}"
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
06.12.2017, 14:43  [ТС]
С match у меня ошибка появляется, точнее кидает на error. К примеру вот этот адрес вбиваю: 4r-4t-32-33-2r-r3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string q;
    cout << "Введите адрес" << q << endl;
    getline(cin,q);
    if (regex_match(q, regex{ "[0-9a-f]{2}-[0-9a-f]{2}" }))
    {
        cout << "все верно" << endl; 
    }
    else
        cout << "error" << endl;
    
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.12.2017, 15:02
В 11-м сообщении короткий вариант предложили, пробуй.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
06.12.2017, 15:05  [ТС]
Пробую все тот же пример из прошлого моего сообщения, все ровно ошибка.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
06.12.2017, 15:12
Цитата Сообщение от hqhihi Посмотреть сообщение
4r-4t-32-33-2r-r3
А откуда r и t в мак-адресе? Там же 16-ричные числа, т.е. бывает a b c d e f , и всё. Никаких r и t!
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.12.2017, 15:16
Всё работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    string q;
    getline(cin, q);
    
    regex r("[0-9a-f]{2}(-[0-9a-f]{2}){5}");
    
    cout << regex_match(q, r);
}
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
06.12.2017, 15:22
Например
C++
1
4e-4a-32-33-2b-c3
подходит

Добавлено через 2 минуты
nmcf,
C++
1
 cout << boolalpha << regex_match(q, r);
0
06.12.2017, 15:23

Не по теме:

TRam_, да я просто проверить сделал.

0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 27
06.12.2017, 15:24  [ТС]
Спасибо всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2017, 15:24
Помогаю со студенческими работами здесь

Проверка на регулярные выражения см в нутри
Проверка на регулярные выражения, как сделать если условия не верны ктопка не активна и показывает все блоки кторотые неверны! и можно как...

Регулярные выражения. Проверка вводимых символов
Здравствуйте. Есть переменная, в которую пользователь должен ввести данные. Как ограничить ввод ненужных символов при помощи регулярных...

Проверка на 30 февраля через регулярные выражения
Помогите пожалуйста решить задачу. Надо проверить сколько раз в тексте встречается дата в формате дд-мм-гггг. Все работает,но проверку на...

Проверка заполнения кошелька (регулярные выражения)
Всем привет! Подскажите пожалуйста строчку выражений, по которым можно проверить правильность заполнения кошелька. Например на вебмани я...

Регулярные выражения и проверка строки на цифру (Elixir)
Я решаю задачу и не могу понять как написать регулярное выражение условие: ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru