powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++11 regex
22 сообщений из 47, страница 2 из 2
С++11 regex
    #39074893
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

Хотя нет, неправильно я написал. 11 чисел тоже пропустит моё выражение :(
...
Рейтинг: 0 / 0
С++11 regex
    #39074895
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во!

Код: plaintext
1.
2.
3.
4.
if (expr.matches("^(\\d{9, 10})|(\\d{12})$")
{
    // ...
}
...
Рейтинг: 0 / 0
С++11 regex
    #39074899
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravСорри протестировать не могу это выражение, но идея понятна должна быть.
У меня щас нет реквеста на баг или фичу для этого кода. Но как - только будет я уж
оттянусь.

Изначально - планировал выкинуть регулярки нахер. Но потом по смыслу когда - где-то идёт
парсинг телефона. Где-то zip-code. Где-то даты. Планирую хотя-бы обеспечить повторное использование
Matcher.

В данном - кейсе строка цифр от 9 до 12. Не включая строку длиной 11.
...
Рейтинг: 0 / 0
С++11 regex
    #39074911
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИзначально - планировал выкинуть регулярки нахер. Но потом по смыслу когда - где-то идёт
парсинг телефона. Где-то zip-code. Где-то даты.
Если это полноценная БД: для начала выкинуть все значения несоответствующие формату. Не вписываются - поставить NULL. Если даты, то 32-го числа не бывает и т.д и т.п. Отфильтровав некорректные значения на уровне вставки - значительно упростишь последующие проверки.
maytonВ данном - кейсе строка цифр от 9 до 12. Не включая строку длиной 11.
Не буду раздувать, думаю ты понял вышесказанное. Как говорил мой начальник "Бардак автоматизировать нельзя".
...
Рейтинг: 0 / 0
С++11 regex
    #39074928
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНеа, не убирали, а не вводили, не успели потому что :) В V7 были классы :digit:, :alpha: и так далее.
Это же mayton код постил, и я думал что V7 это про java 7 ))
А если V7 это про движок джаваскрипта - тогда верю что через одно место было сделано ))
...
Рейтинг: 0 / 0
С++11 regex
    #39074929
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУ меня щас нет реквеста на баг или фичу для этого кода. Но как - только будет я уж
оттянусь.

Изначально - планировал выкинуть регулярки нахер. Но потом по смыслу когда - где-то идёт
парсинг телефона. Где-то zip-code. Где-то даты. Планирую хотя-бы обеспечить повторное использование
Matcher.
Если это валидация ввода, то оптимизировать надо не тут, а то место в котором эта валидация вызывается настолько часто, что имеют значение задержки в доли миллисекунд.
...
Рейтинг: 0 / 0
С++11 regex
    #39074932
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravВо!

Код: plaintext
1.
2.
3.
4.
if (expr.matches("^(\\d{9, 10})|(\\d{12})$")
{
    // ...
}


Скорее всего имелась в виду оптимизация типа такого:
Код: plaintext
1.
2.
3.
if (expr.matches("^\\d+$") && (expr.size() == 9 || expr.size() == 11 ...))
{
}


А потом заказчик захочет поддержку дефисов и скобочек и вся оптимизация к черту ))
...
Рейтинг: 0 / 0
С++11 regex
    #39074937
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlНеа, не убирали, а не вводили, не успели потому что :) В V7 были классы :digit:, :alpha: и так далее.
Это же mayton код постил, и я думал что V7 это про java 7 ))
А если V7 это про движок джаваскрипта - тогда верю что через одно место было сделано ))Не, я говорил исключительно про эхотаг :)
Регулярки появились еще в 50-х, но очень долго люди не могли определиться с синтаксисом и каждый делал (да и продолжают делать) кто во что горазд. Ну и в никсах/posix довольно долго была своя собственная реализация, которая и развивалась самостоятельно под своими номерами и именовалась "V#". Насколько я знаю V7 была последней перед вводом PCRE в стандарт в качестве основной реализации.
...
Рейтинг: 0 / 0
С++11 regex
    #39074938
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyСкорее всего имелась в виду оптимизация типа такого:
Код: plaintext
1.
2.
3.
if (expr.matches("^\\d+$") && (expr.size() == 9 || expr.size() == 11 ...))
{
}

Тогда лучше:

Код: plaintext
1.
2.
3.
if (!expr.matches("\\w") && (expr.size() == 9 || expr.size() == 10 || expr.size() == 12))
{
}
...
Рейтинг: 0 / 0
С++11 regex
    #39074964
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskypetravВо!

Код: plaintext
1.
2.
3.
4.
if (expr.matches("^(\\d{9, 10})|(\\d{12})$")
{
    // ...
}


Скорее всего имелась в виду оптимизация типа такого:
Код: plaintext
1.
2.
3.
if (expr.matches("^\\d+$") && (expr.size() == 9 || expr.size() == 11 ...))
{
}


А потом заказчик захочет поддержку дефисов и скобочек и вся оптимизация к черту ))
Да, ваш вариант быстрее. Я как-то больше думал над устранением дублирования кода (исходный вариант с тремя регулярками был ужасен). Но если думать именно о производительности, то, имхо, там легче написать свою функцию проверки — там всего несколько строк — и отказаться от регулярок. Думаю будет на порядок быстрее.
...
Рейтинг: 0 / 0
С++11 regex
    #39074973
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЕсли это валидация ввода, то оптимизировать надо не тут, а то место в котором эта валидация вызывается настолько часто, что имеют значение задержки в доли миллисекунд.
В этом комплексе 20 тыс пользователей. И каждый поисковый запрос (типа
полнотекстового поиска) проходит длинный конвейер проверок в т.ч. и эти
регулярки.

Впрочем я не хочу оффтопить и отвлекать от главной темы.
...
Рейтинг: 0 / 0
С++11 regex
    #39075145
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Если не ошибаюсь, мы как то уже гоняли тесты буустовских регулярок. Порядок скорости был типа миллион в секунду.
...
Рейтинг: 0 / 0
С++11 regex
    #39075252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зимарглmayton,

Если не ошибаюсь, мы как то уже гоняли тесты буустовских регулярок. Порядок скорости был типа миллион в секунду.
Э... во первых я про буст. Я вообще в принципе ворчу. На юзкейсы.

Во вторых мне как человеку дотошному и занудному совершенно непонятна фраза
"миллион в секунду". Миллион попугаев или слонёнков. За кадром остаётся сложность самой регулярки.
А это - ни хер собачий. Это конечный автомат мать его. И отклик от него (наверное) зависит от того как
выглядит сам expression. И наверное отклик зависит от длинны строки которую мы анализируем.

Поэтому фраза 1000000 в сек. это как-то ниочём. Ну тоесть для меня она неинформативна.
...
Рейтинг: 0 / 0
С++11 regex
    #39075599
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоэтому фраза 1000000 в сек. это как-то ниочём. Ну тоесть для меня она неинформативна.
Гггг. Это написал человек, который в описании проблемы указал только:
maytonТолько работает он медленно.

1000000 - это хоть какая-то конкретика, верхний предел скорости.
А вот что такое "медленно" мы так и не узнали.
...
Рейтинг: 0 / 0
С++11 regex
    #39075614
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока тут вообще никакой конкретики ;) Марк об этом подробно написал
...
Рейтинг: 0 / 0
С++11 regex
    #39075619
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10^6 может быть, но не значит что это максимум, среднее или что-то ещё. Такое число может быть
...
Рейтинг: 0 / 0
С++11 regex
    #39075641
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky1000000 - это хоть какая-то конкретика, верхний предел скорости.
А вот что такое "медленно" мы так и не узнали.
Есть разные подходы к оценке производительности. Мой базируется на вычислении
НАПРАВЛЕНИЙ куда можно улучшать. В данном случае как решили коллеги
(совершенно верно) в устранении ненужных или покрывающих друг друга
предикатов.

Выше мне сказали дескыть - авот в бусте - 1000000 чего-то там такого. И что?
И где? И как? И какой был best practices? Просто я не понимаю какую инфу я из
этого должен взять? Что мне надо юзать буст?

Извините меня дорогие коллеги. Ну также нельзя ну ё-моё.
...
Рейтинг: 0 / 0
С++11 regex
    #39075952
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

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

Хочешь подробности - делай конкретный юзкейс и тестируй.
...
Рейтинг: 0 / 0
С++11 regex
    #39076019
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly Moskovsky1000000 - это хоть какая-то конкретика, верхний предел скорости.
А вот что такое "медленно" мы так и не узнали.
Есть разные подходы к оценке производительности. Мой базируется на вычислении
НАПРАВЛЕНИЙ куда можно улучшать. В данном случае как решили коллеги
(совершенно верно) в устранении ненужных или покрывающих друг друга
предикатов.

Выше мне сказали дескыть - авот в бусте - 1000000 чего-то там такого. И что?
И где? И как? И какой был best practices? Просто я не понимаю какую инфу я из
этого должен взять? Что мне надо юзать буст?

Извините меня дорогие коллеги. Ну также нельзя ну ё-моё.
Не согласен. Реализация на Си быстрее, как понимаю, задача у тебя устоявшаяся и требующая ускорения, т.е. переписав ее на С ты однозначно получишь ускорение, а буст или не буст зависит только от задачи. Оптимизировать излишние проверки и в С не помешает.
...
Рейтинг: 0 / 0
С++11 regex
    #39076053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНе согласен. Реализация на Си быстрее, как понимаю, задача у тебя устоявшаяся и требующая ускорения, т.е. переписав ее на С ты однозначно получишь ускорение, а буст или не буст зависит только от задачи. Оптимизировать излишние проверки и в С не помешает.
Полностью исключено. Заказчик будет против. +Там наши собственные требования по интеграции.
Java + несколько слоёв кодогенерации. Аспекты и кросскомпилляторы.

Подключение JNI сделает задачу непрозрачной для тестирования на Linux да и вообще добавляет
огромное количество кейсов исследования. Вобщем отпадает.

По поводу бенчмарков - это тема. Я буду писать модульные тесты когда переколбашу модуль
поиска. Тогда у меня будут цифры. Сколько там поисков в секунду. БД заменю на Mocks
чтобы убрать случайные влияния и можно будет видеть чистый алгоритм с регулярками.
...
Рейтинг: 0 / 0
С++11 regex
    #39076070
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonнесколько слоёв кодогенерации
Начните отсюда оптимизировать, потом уже микросекундами займетесь ))
...
Рейтинг: 0 / 0
С++11 regex
    #39076089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Закончим на этом.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / С++11 regex
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]