Альтернативы регулярным выражениям

Согласно документации:

https://dev.mysql.com/doc/refman/5.5/en/signal.html

В В следующих описаниях «необработанный» означает, что никакой обработчик для сообщенного значения SQLSTATE не был определен с DECLARE ... HANDLER.

Class = '00' (success)

Illegal. SQLSTATE values that begin with '00' indicate success and are not valid for SIGNAL.
blockquote>

Другими словами, вы можете использовать только «сигнал» для возврата условия ОШИБКА . НЕ сигнал вызова подразумевает «успех».

signal sqlstate '12345'
    set message_text = '::SOME CUSTOM ERROR::'

11
задан Chad Birch 3 April 2009 в 21:59
поделиться

6 ответов

Я склонен согласиться с Королем M, хотя Ваше второе требование для числовых ограничений усложняет вещи. Если Вы только не позволили очень простые ограничения, я не знаю о способе кратко выразить это в регулярном выражении. Если существует такой путь, игнорируйте остальную часть моего ответа и следуйте за другими предложениями здесь.:)

Вы могли бы хотеть рассмотреть парсер-генератор - вещи как классический закон и yacc. Я не действительно знаком с выбором Java, но здесь являюсь списком:

http://java-source.net/open-source/parser-generators

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

В Вашем случае я предполагаю синтаксический анализатор, приводящий к комбинации регулярного выражения и дополнительных условий. Для Вашего числового ограничительного примера это могло бы дать Вам регулярное выражение \/cal/long/3/4/143:(\d+)\ и ограничение для применения к первой группировке ( \d+ часть), который требует, чтобы число находилось между 100 и 1100. Вы затем применили бы РЕ к своим строкам для кандидатов и применили бы ограничение к тем кандидатам для нахождения соответствий.

Это - довольно сложный подход, так надо надеяться, существует более простой путь. Я надеюсь, что это дает Вам некоторое представление, по крайней мере.

4
ответ дан 3 December 2019 в 07:14
поделиться

Ограничение Java является серьезным. Я рекомендовал бы использовать парсинг combinators, но необходимо будет перевести идеи Java с помощью классов вместо функций. Существуют многие, многие бумаги, доступные по этой теме; один из самых легких для приближения является Функциями Graham Hutton Высшего порядка для Парсинга. Подход Hutton делает особенно легким решить успешно выполниться или перестать работать на основе условий как величина числа, поскольку Вы показываете в своем примере.

4
ответ дан 3 December 2019 в 07:14
поделиться

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

Если Вы действительно находите или создаете некоторый альтернативный язык парсинга, который только покрывает подмножество возможностей, Regex может, Вы быстро иметь пользователя, просящего понятие, которое может быть выражено в Regex, но Ваша разновидность просто не учитывает. Потратьте свои проблемы решения времени, которые не были решены вместо этого!

7
ответ дан 3 December 2019 в 07:14
поделиться

На самом деле то, что Вы описали, является Сопоставителем Java. Который просто, оказывается, использует Regex в качестве его языка.

0
ответ дан 3 December 2019 в 07:14
поделиться

К сожалению, не все программисты (самостоятельно включенный) так знакомы с RegEx, как они должны быть. Это часто означает, что мы заканчиваем тем, что писали нашу собственную строковую логику синтаксического анализа, где RegEx, возможно, иначе обслуживал нас хорошо.

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

2
ответ дан 3 December 2019 в 07:14
поделиться

http://java-source.net/Open-source/parser-generators и http://catalog.compilertools.net/java.html Содержать каталоги инструментов для этого. Сравните также в вопросе Stackoverflow Как я могу разбирать код для создания компилятора в Java? .

0
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

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