Какое регулярное выражение API вы бы подражать? - PullRequest
1 голос
/ 25 октября 2009

В большинстве языков программирования есть API для поиска и замены регулярных выражений. По моему опыту, apis может быть довольно неуклюжим, вероятно, из-за количества доступных действий и соображений эффективности.

Если бы вы собирались реализовать API, какой бы вы подражали?

Особый интерес представляют методы и объекты API, а также диалект регулярных выражений и соблюдение любых стандартов.

Ответы [ 3 ]

3 голосов
/ 25 октября 2009

Если вы эмулируете API, оно будет таким же неуклюжим, как и оригинал (если не больше). Я не вижу, к чему вы клоните. Если вы действительно беспокоитесь о потере 100 Кбайт для API регулярных выражений, вам следует реализовать только минималистичный набор, который не будет напоминать большой. Проверьте, есть ли в каких-либо API-интерфейсах настройки для отключения ненужных вам функций.

2 голосов
/ 25 октября 2009

Я думаю, API сопоставления с шаблоном Lua является отличным API для эмуляции. У этого есть превосходный баланс силы против простоты. И есть один блестящий выбор дизайна: escape-символ для регулярных выражений отличается от escape-символа для строковых литералов & mdash; таким образом, нет ада с обратной косой чертой .

Если бы я добавил одну вещь в Lua API, это были бы или-паттерны.

0 голосов
/ 26 октября 2009

Фактически реализовав полный механизм регулярных выражений (используемый внутри продуктов моей компании, таких как RegexBuddy) и общедоступный «API» на основе PCRE (компонент TPerlRegEx для Delphi), я рекомендую не слишком беспокоиться о подражая тому или другому, но вместо этого сосредоточьтесь на том, для чего будет использоваться ваша библиотека регулярных выражений. К сожалению, вы мало что говорите об этом, кроме упоминания эффективности. Правильно разработанная библиотека не должна быть менее эффективной только потому, что она имеет больше доступных функций. Например. PCRE предлагает богатый вкус регулярных выражений и отличную производительность, но ограниченный набор библиотечных функций (например, нет поиска и замены). Но добавление дополнительных библиотечных функций, таких как поиск и замена, не замедлит работу PCRE, поскольку неиспользуемые вызовы даже не нужно связывать с окончательным .exe.

Стандартов регулярных выражений нет. Только условности, которые часто красуются тонкими способами. Если «стандарты» имеют значение, просто используйте одну из популярных библиотек регулярных выражений, даже если она не идеальна.

Если вы хотите чего-то стандартного минимализма, найдите копию regex.c Генри Спенсера, в которой реализованы регулярные выражения POSIX.

...