Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602

Регулярные выражения, классы символов и обратные ссылки

18.05.2019, 01:39. Показов 2050. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос к знатокам: где-то закреплено что вот такое выражение делать должно?
C++
1
std::regex regex("(.)[\\1]");
В gcc падает, в Перле отрабатывается, но я так и не понял что в итоге делает. Логика подсказывает что оно и не должно работать, но я с разбегу не нашел где написано что обратные ссылки в квадратные скобки совать нельзя. А если даже и нельзя, тогда не должен ли движок обработать подобный текст как "экранированная единичка"?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2019, 01:39
Ответы с готовыми решениями:

Регулярные выражения: вставка символов в середину найденного выражения
Есть строки типа этого: "В году 1783 марта месяца произошло событие, которые на долго запомнилось"78. регулярное выражение...

Регулярные выражения. Повторение именованой обратной ссылки
Здравствуйте, помогите пожалуйста составить регулярное выражение для строки. Пример строки "//; :\1:2;3:4;10" Или еще пример...

Регулярные выражения экранирование символов
Regex.Match(lineAll, "\""); // Вот так экранирует Regex.Match(lineAll, @"\""); // Вот так нет Regex.Match(lineAll, @"\(");...

15
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 01:50
вообще это означает любой одиночный символ+ (\ или 1) т.е. в строке aaa\xxx1zzz совпадения \a и x1
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.05.2019, 01:53  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
вообще это означает любой одиночный символ+ (\ или 1)
При использовании raw-строк. В обычных Си-строках удвоенный двойной слеш раскрывается в одинарный на стадии компиляции.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 01:53
если нужен литерал то правильно так: "(.)[\\\1]"
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.05.2019, 01:55  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
если нужен литерал то правильно так: "(.)[\\\1]"
Нужна именно обратная ссылка (backreference если вам этот термин понятнее) внутри квадратных скобок, чтобы посмотреть что из этого получится.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 01:58
Цитата Сообщение от Renji Посмотреть сообщение
Нужна именно обратная ссылка
насколько я знаю ECMAscript не поддерживает, а вообще это вроде обозначается так: (?1)
0
19498 / 10103 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.05.2019, 02:01
Renji, Мне кажется падает, потому что в С++ коде нужно писать так:
C++
1
std::regex regex("(.)[\\\\1]");
или так:
C++
1
std::regex regex(R"((.)[\\1])");
Чтобы получить в итоге такую регулярку: (.)[\\1].
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 02:03
Цитата Сообщение от DrOffset Посмотреть сообщение
[\\\\1]
точно
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.05.2019, 02:05  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
насколько я знаю ECMAscript не поддерживает, а вообще это вроде обозначается так: (?1)
Обратные ссылки он поддерживает. А вот где написано что будет если такую ссылку запихать в символьный класс я так и не нашел.
Цитата Сообщение от DrOffset Посмотреть сообщение
Чтобы получить в итоге такую регулярку: (.)[\\1].
Не, не, надо было именно
Code
1
[\1]
с одним слешем.
0
19498 / 10103 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.05.2019, 02:08
Цитата Сообщение от Renji Посмотреть сообщение
не должен ли движок обработать подобный текст как "экранированная единичка"
Посмотри здесь: https://www.ecma-international... ma-262.pdf, таблица 34.

Добавлено через 41 секунду
Цитата Сообщение от Renji Посмотреть сообщение
надо было именно с одним слешем.
Тогда тем более смотри 34 таблицу

Добавлено через 1 минуту
Собственно описание исключения об этом и говорит:
The expression contained an invalid escaped character, or a trailing escape.
После \ ждет вполне конкретных вариантов, а их нет.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.05.2019, 02:13  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Посмотри здесь: https://www.ecma-international... ma-262.pdf, таблица 34.
Строчкой ниже - "The SV of CharacterEscapeSequence::NonEscapeCharac ter is the SV of the NonEscapeCharacter". То есть, не распознанные эскейп-символы должны просто отображаться сами в себя.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
После \ ждет вполне конкретных вариантов, а их нет.
Но на
C++
1
std::regex regex("[\\p]");
ничего не падает, хотя p в табличке тоже нет.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 02:15
Цитата Сообщение от Renji Посмотреть сообщение
Обратные ссылки он поддерживает.
да, правильно, но в скобки(квадратные) пихать нельзя походу, так работает std::regex{ "(.)\\1" }
0
19498 / 10103 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.05.2019, 02:30
Лучший ответ Сообщение было отмечено Renji как решение

Решение

Renji, ладно, давай определяться.
Вопрос:
Цитата Сообщение от Renji Посмотреть сообщение
где-то закреплено что вот такое выражение делать должно?
Ответ:
https://www.ecma-international... ma-262.pdf

Вопрос:
Цитата Сообщение от Renji Посмотреть сообщение
не должен ли движок обработать подобный текст как "экранированная единичка"?
Ответ:
Цитата Сообщение от Renji Посмотреть сообщение
То есть, не распознанные эскейп-символы должны просто отображаться сами в себя.
Вроде все понятно, нет?

Реализация std:: вроде как именно ECMAst берет за основу. И если она ей следует не до конца, то увы.
А вообще std::regex никому не нравится. Не слышал еще ни от кого, что там все нормально.
3
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 02:34
Ну и по логике, совпадение не может являться классом символов, т.к. в общем случае является последовательностью
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.05.2019, 10:57  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну и по логике, совпадение не может являться классом символов, т.к. в общем случае является последовательностью
В теории может. Просто все символы последовательности будут на лету добавляться в класс. Другой вопрос что если движок такое поддерживает, то по логике об этом должно быть написано прямым текстом.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.05.2019, 11:57
Цитата Сообщение от Renji Посмотреть сообщение
В теории может.
Вот тут поизвращался и все таки удалось засунуть в класс символов, что бы распозналось, НО оно не работает (другие скрипты тож пробовал) https://regex101.com/r/rnxb7H/1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2019, 11:57
Помогаю со студенческими работами здесь

Регулярные выражения и обработка символов
Народ, возникла необходимость составить SQL запрос для подсчета количества разделителей в строке и во всей таблице. В качестве разделителя...

Используя регулярные выражения извлечь из текста html-файла все ссылки
Извлеките из текста html-файла все ссылки (всё, что содержится в шаблоне <a href=’…’>)* * Для работы с html запросами используйте...

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения - парсинг группы символов
пишу транслятор. необходимо распарсить выражения вида <=, <, =, >, =>. использую boost::tokenizer, не знаю как бы можно было сказать чтобы...

Регулярные выражения и ограничения по выводу символов
Есть вот такой скрипт, но что то в нем не работает, пустой экран на выходе. Подскажите в чем ошибка плиз! <?php /** *...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru