2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
1 | ||||||
Посоветуйте чтиво по регуляркам С++1104.09.2016, 16:56. Показов 1396. Ответов 16
Метки нет (Все метки)
Добрый день,
посоветуйте чтиво по регулярным выражениям - понимаю, что нужно использовать
буду парсить что-то такое: "folder/type_name_id_specialType_"
0
|
04.09.2016, 16:56 | |
Ответы с готовыми решениями:
16
Подскажите чтиво по VS Чтиво по спириту Чтиво VBScript Простейшее чтиво |
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
04.09.2016, 17:06 | 2 |
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.09.2016, 00:09 | 3 |
Нужно использовать буст с PCRE синтаксисом. А за используемый в STL ECMAScript синтаксис надо больно бить по рукам, приговаривая "Задай жадность квантификатора! Задай, сволочь!". И нет, я знаю про флаг std::regex::grep. Но он действует на все выражение, а я хочу один квантификатор.
А так, ну cplusplus.com в помощь. Что в скобочки регулярок захватили, то и лежит.
1
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
05.09.2016, 09:38 [ТС] | 4 |
Renji, то есть
0
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
05.09.2016, 09:46 | 5 |
имхо сейчас он именно про синтаксис, а не про производительность.
если нужно чтобы было быстро - есть утилиты, которые из регулярки собирают тебе конечный автомат на goto всяких, который быстро очень работает. но ты скорее всего про это знаешь опять же. Добавлено через 2 минуты Не по теме: у меня знакомая дальняя пилила такой проект, могу ссылку, если нужно.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
05.09.2016, 17:44 | 6 |
В STL с ECMAScript невозможно использовать сверхжадные квантификаторы. На сколько от этого просядет производительность - зависит от регулярки и текста с которым она работает. Но таки да, просядет, так как просто жадные квантификаторы любят откатываться назад по тексту. А если таких квантификаторов у вас несколько подряд... Сугубо искусственный пример, но демонстрирует проблему - берем выражение "a*a*a*a*c", скармливаем ему тысяч восемь 'a'.
Как оно в STL - выражение означает "куча 'a', куча 'a', куча 'a', куча 'a', в конце 'c'". Однако же, про размер четырех куч ничего не сказано, возможных вариантов дофига. И вот движок думу думает - давайте в первую кучу положим все 'a'... Упс, 'c' после куч не вышло. Ну, тогда, может в первую кучу семь тысяч 'a', а во вторую одну тысячу (откат назад по тексту)? Эх ты, опять не вышло. И заниматься он этой ерундой будет столько, что вы успеете чайку попить. Как оно в перловском PCRE - "максимально большая куча 'a', максимально большая куча 'a', максимально большая куча 'a', максимально большая куча 'a', 'c'". Движок все 'a' сгребает в первую кучу, в оставшиеся три кладет что осталось, 'c' не находит и объявляет "что за фигню вы мне подсунули?". Еще смешнее, если ваша регулярка каким-то там образом полагается на то что движок будет искать именно максимально большую кучу. Регулярка полагается, а движок слова "максимально" не знает. Что получится в итоге не известно.
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
05.09.2016, 18:24 [ТС] | 7 | |||||
Renji, думаю такое применить - строк подобных будет до 100, конечный дивайс мобильник, думаю потянет
Кликните здесь для просмотра всего текста
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
05.09.2016, 19:09 | 8 |
Renji, не совсем понял проблему с ECMAScript... Там же можно задать жадность/не жадность каждого квантификатора через ?.
По умолчанию - жадный. Если после него сразу ? - то наоборот.
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
||||||
05.09.2016, 19:45 | 9 | |||||
А проблема в том, что вам врут, путем нестандартной (относительно PCRE) терминологии. "Жадные" квантификаторы ECMAScript, это ленивые квантификаторы Перла. А ленивые квантификаторы ECMAScript, это вообще непойми что.
UPD Хотя, нет, посыпаю голову пеплом, набросал тест - в Перле тоже не сверхжадность.
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
05.09.2016, 20:13 [ТС] | 10 |
Renji, а я вам так верил ..............................................................
Добавлено через 25 минут ct0r, подскажешь? Код нормальный? Встал вопрос json с буковками ( объём памяти ) или всё одной строкой и парсить регуляркой ( меньше памяти, упор на вычислительные мощи). Платформа: мобильные устройства )
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
05.09.2016, 20:28 | 11 |
rikimaru2013, книжку Джоссатиса по STL надо взять. Там довольно толково написано.
В сети болтается файл - хорошего качества.
1
|
05.09.2016, 21:04 | 12 | |||||
В бусте для снятия жадности нужно добавлять "?"
Бен Форта "Регулярные выражения (10 минут на урок)"
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
05.09.2016, 21:18 | 13 |
rikimaru2013, а почему тут регулярки юзаешь? В чем профит?
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
05.09.2016, 21:28 [ТС] | 14 |
ct0r,
Кликните здесь для просмотра всего текста
Есть имя с PSD, которая указывать какой тип в С++ создавать (сущность) - кнопка, ... , ... , ... и т.д. Сейчас в js через indexOf и substring провожу длительный распарс строки дизайнера на полезную информацию и отправляю всё через Json в С++. Там он читает по ключам данные и делает всё остальное. Вот думаю, а не будет ли выгоднее вместо 6-8 ключ-данные в json на каждый объект передавать строку и распарсить в С++. Таких json файлов около 60 - думаю сэкономлю памяти на json, но потрачу мощности при загрузки конкретного уровня. Или оставить всё как есть как думаешь?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
05.09.2016, 21:46 | 15 |
rikimaru2013, код должен позволять менять формат на раз-два в любом случае.
И я не уловил, почему парсинг json должен делаться быстрее, нежели просто строки?
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
06.09.2016, 02:32 | 16 |
А мне не надо снять жадность, мне надо повысить ее до possessive quantifiers. Уже нагуглил - надо * поменять на *+. И таки в PCRE. в STL фокус не работает. Но мне почему-то казалось что сверхжадность должна была быть в Перле по умолчанию.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
06.09.2016, 15:43 | 17 |
Это, конечно, наркоманский подход, но мне хорошо регулярки помогла понять книга Learning Perl (O'reilly). Там достаточно много хороших упражнений для практики именно регулярок. Ну и пусть синтаксис языка немного другой, основная логика задач на регулярки: дана строка - ищем соответствие/подстроку по регулярке - выводим результат.
2
|
06.09.2016, 15:43 | |
06.09.2016, 15:43 | |
Помогаю со студенческими работами здесь
17
Вопрос по регуляркам Задание по регуляркам Обучение регуляркам Задача по регуляркам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |