Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

Регулярные выражения   Найти похожие ветки 

 
Pavia ©   (2014-12-16 10:13) [0]

Делаю для себя, вернее для тренировки, библиотечку для работы с регулярными выражениями. Так вот возник вопрос, как обрабатывать символ означающее пустое множество символов?
К примеру есть шаблон
/(|a)/
допустим он эквивалентен такой записи.
/([:Eps:]|a)/

стоит ли выдавать ошибку на недопустимость грамматики или стоит обрабатывать? И если обрабатывать то должен ли
/([:Eps:]|a)/.test("bob")
возвращать true?
Предполагается что "bob"="[:Eps:]b[:Eps:]o[:Eps:]b[:Eps:]"

Интересует как это сделано в других языках и библиотеках.


 
han_malign ©   (2014-12-16 11:31) [1]

по правилам - сравнение с пустым шаблоном всегда успешно...
на этом в PCRE построен трюк предварительного описания именованных шаблонов (?(DEFINE)(?"pattern1"...)...)

В FAR/LuaFAR - проходит... находит любой символ.

явовский лень запускать...


 
Дмитрий С ©   (2014-12-16 16:47) [2]

Должен обрабатывать. Как минимум это ожидаемое поведение.


 
Pavia ©   (2014-12-16 17:03) [3]

А где это в правилах описывается? Можно ссылку на любую документацию?


 
Дмитрий С ©   (2014-12-16 17:29) [4]

А как вы без какой-либо документации библиотеку делаете? :)


 
Pavia ©   (2014-12-16 18:13) [5]

Неправильно выразился. Доккументация есть, но дело в том что в ней непрописан этот момент.
Существует около 12, а то  и поболее модификаций грамматик регулярных
выражений. И их реализаций в виде библиотек. Пишу 13 вариант. Понятно что можно сделать по своему. Но хочется остаться в рамках традиций. Поэтому и создал тему что бы определиться с вариантам.  Судя по результатам возвращается толи ерунда, толи идёт замена на символ /./ А как бы поступили вы?


 
han_malign ©   (2014-12-18 13:46) [6]


> А как бы поступили вы?

- с точки зрения теории - конструкция полностью корректна
https://ru.wikipedia.org/wiki/Регулярные_выражения#.D0.92_.D1.82.D0.B5.D0.BE.D1.80.D0.B8.D0.B8_.D1.84.D0.BE.D1 .80.D0.BC.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0. B2

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

а если оно еще и приводит к усложнению алгоритма - то адназначна KISS...



Страницы: 1 вся ветка

Текущий архив: 2015.09.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
15-1415447176
dmk
2014-11-08 14:46
2015.09.10
Про переменные


15-1417013096
ВладОшин
2014-11-26 17:44
2015.09.10
Самое время покупать кондиционер, прошу совета


2-1393854752
JohnKorsh
2014-03-03 17:52
2015.09.10
Использование DLL в Delphi XE


15-1413029873
Kerk
2014-10-11 16:17
2015.09.10
Orpheus,Abbrevia,VirtualTree,SynEdit,LockBox,AsyncPro,PowerPDF


2-1392444785
Novicer
2014-02-15 10:13
2015.09.10
Как минимизировать число Query в DataModule?