Привет всем :) Пытаюсь использовать регулярки в расте. Проблема: падает unwrap

если регулярка ничего не найдет

Хочу в функции например 20 регулярок для 1 строки, и в зависимости от того, какая именно регулярка сработает, возвращать разный результат функции.

Вот код: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=813252c6a402fab504011229244cfa5f

Если в 4 строке добавить последним символом пробел в строку, паниковать не будет

24 ответов

17 просмотров

Так не используй unwrap

Mark-Lansky Автор вопроса
Алишер Галиев
Так не используй unwrap

хорошо, что использовать?

Mark Lansky
хорошо, что использовать?

зависит от того что ты хочешь

И если это реальный код, а не просто пример, то лучше использовать one_cell, а не создавать каждый раз регулярку. Это накладно

Mark-Lansky Автор вопроса
Алиса Королёва
зависит от того что ты хочешь

функция принимает в себя строку. функция прогоняет строку через 20 регулярок и в зависимости от того, какая регулярка срабатывает, возвращает разный результат. если уж никакая регулярка не сработает (инвариант), пусть паникует

Mark-Lansky Автор вопроса
Алиса Королёва
а если сматчились две регулярки?

как только первая в функции метчится, отдаётся результат и остальные регулярки даже не проверяются

Алиса Королёва
а если сматчились две регулярки?

а такое может быть? если делать через match блок и не параллелизовывать match

Mark Lansky
как только первая в функции метчится, отдаётся рез...

то есть у тебя есть последовательность регулярок и ты хочешь найти первую сматчившуюся?

Mark-Lansky Автор вопроса
Алиса Королёва
то есть у тебя есть последовательность регулярок и...

вот референс. если метчится, достаём группу из строки, делаем return. если не метчится, пропускаем и идём дальше по коду

if let Some(cap) = .... { return ... }

Mark-Lansky Автор вопроса

а что смешного?) мне всё равно для каждой регулярки вручную прописывать результат который будет возвращать функция

если нужно под каждую регулярку прописывать то только match-блоком будет приятно читаться

Mark-Lansky Автор вопроса
Mark Lansky
а что смешного?) мне всё равно для каждой регулярк...

Ну тогда можно предусмотреть что она будет возвращать, если ничего не найдет. Это так и делается. Или Option<T> / Result<T>, или дефолтное T, или panic Другого варианта нет

Mark-Lansky Автор вопроса
Алишер Галиев
if let Some(cap) = .... { return ... }

пока вот это решение думаю попробовать позже, топорно, логично, как я представлял если что-то можно лучше сделать, давайте придумаем

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=a9187c741be4cf63eb2bb7c578ff7a12 что-то такое?

Mark-Lansky Автор вопроса

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

Mark Lansky
скорее всего, но это код точно не для новичка, и я...

Создает массив регулярных выражений и проходится по этому массиву пытаясь спарсить один и тот же входной текст каждым регулярным выражением. Останавливается на первом совпадении. Можно оптимизировать и далее. Например vec! в LazyLock лишний, а хранить указатель на функцию рядом с регулярным выражением явно лишнее. Можно просто сделать impl Foo<'_> { fn new<'a>(...) -> Foo<'a> { ... } }

Похожие вопросы

Обсуждают сегодня

Ребята, я за проф советом😅 По микросервисам. В монолите есть общие файлы для сервисов: фетчи, конфиги, либы, утилсы.. как при распиле правильно их поддерживать? Пока вариант д...
Александр Тарасюк
1
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Подскажите где можно прочитать про реализацию возможности писать человеку при подписке на телеграм канал от имени бота? Было бы не плохо если для Telegraf@3.38.0
Pan Lipton
10
Мне вот что интересно, кто на рфе стартовал/играл, что вы фармили, в каком виде контента он прямо хорош? Экспедиция? Вроде прямо на замазанных мапах рф сдувается
Владислав
20
‌/r/pathofexile moderation changes top scoring links : pathofexile (RSS) Hi, everyone. On behalf of the subreddit mod team, I’m here to give you a few updates on the subreddi...
Esionru
3
Кто нибудь поясните это всё таки вброс или да? Про санктум слышал на поедб вбросили, а по дурке откуда инфа и на сколько это вообще правда? Пахнет шизофренией какой-то ✅Divi...
Dmitry Ritter
9
У вас бывает ощущение, что хочется потратить весь отпуск на то, чтоб только спать?
Николай
15
Как можно настроить фильтр в пое под себя?
Yarik yarik kyda ti lezesh
15
У меня вопрос к знающими, стоит ли вступать в гильдии в игре или лучше полная свобода?
Енот Полоскун
17
Ребят, есть какие нибудь мили билды, способные в шмотках с пола закрывать атлас?
Ninja Obormot
12
Карта сайта