почему вы используете регулярные выражения?
От: lurrker  
Дата: 02.01.11 09:03
Оценка: 12 (3)
Есть, например, PEG, который превосходит регэксы во всем.
Как минимум одно радикальное преимущество — это возможность делать декомпозицию. Что избавляет от необходимости писать такие вот жутики: http://stackoverflow.com/questions/2245282/what-is-the-longest-regular-expression-you-have-seen
Синтаксис приятнее, легче читается.
И тем не менее, основная масса по прежнему использует регэксы. Почему??
Re: почему вы используете регулярные выражения?
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 02.01.11 09:52
Оценка: 7 (2) +3
Здравствуйте, lurrker, Вы писали:

L>Есть, например, PEG, который превосходит регэксы во всем.


Стало интересно, что это за PEG и ...

L>И тем не менее, основная масса по прежнему использует регэксы. Почему??


... ответ нашел тут же http://www.rsdn.ru/forum/philosophy/3862088.flat.aspx
Автор: VladD2
Дата: 30.06.10

Вселенная бесконечна как вширь, так и вглубь.
Re: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.01.11 10:11
Оценка: +2
Здравствуйте, lurrker, Вы писали:

L>Есть, например, PEG, который превосходит регэксы во всем.


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

L>Как минимум одно радикальное преимущество — это возможность делать декомпозицию. Что избавляет от необходимости писать такие вот жутики: http://stackoverflow.com/questions/2245282/what-is-the-longest-regular-expression-you-have-seen


О какой декомпозиции речь? Если о возможности при разборе сразу выделять грамматические элементы, то она уже есть в нормальном движке регулярных выражений, например:

re_sip_uri_short = "sip:(?:%s)?(?:%s)" % (re_userinfo, re_hostport)
re_sip_uri = "sip:(?:%s)?(?:%s)(?:%s)?(?:%s)?" % \
  (re_userinfo, re_hostport, re_parameters_in_uri, re_headers_in_uri)
re_sip_uri_parse = "sip:(?P<userinfo>(?:%s)?)(?P<hostport>(?:%s))" \
    "(?P<params>(?:%s)?)(?P<headers>(?:%s)?)" % \
    (re_userinfo, re_hostport, re_parameters_in_uri, re_headers_in_uri)
re_addr_spec = re_sip_uri
re_addr_spec_short = re_sip_uri_short
re_name_addr = "(?:(?:(?:%s)?)\\s*<(?:%s)>\\s*)" % \
  (re_display_name, re_addr_spec)
## addr is our own term to name (name-addr|addr-spec-short)
re_addr = "(?:%s|%s)" % (re_name_addr, re_addr_spec_short)
## for SipAddress - separate display name and address
re_name_addr_p = "(?:(?P<display_name>(?:%s)?)\\s*<(?P<uri>%s)>\\s*)" % \
  (re_display_name, re_addr_spec)


См. ?P<имя> в некоторых конструкциях.

Длина re_name_addr_p — 496 байт (я не показал определения нижнего уровня;)), но он тривиален по структуре и достаточно легко понимается.

Тот "жутик" тоже 100% что не писался вручную, а склеивался из частей.

L>Синтаксис приятнее, легче читается.

L>И тем не менее, основная масса по прежнему использует регэксы. Почему??

Ну вот смотри: например, мне нужно решить что применять. Я знаю, что:

1. PEG — новая технология, движки сырые. Массового использования пока нет, каких-то чётких success stories — тоже.
2. Я уже давно умею работать с регулярными выражениями.
3. В Unix мире, движки регулярных выражений 1) на каждом углу, 2) ошлифованы десятилетиями, 3) на все вкусы.
4. Есть известные ограничения и проблемы (см. ссылку).

Что я в этих условиях буду выбирать для простых случаев (а это ~99% применений)?

Или ещё вопрос — это синтаксическое средство, а что на уровне лексики? Вот например pyPEG — какие там средства для лексического уровня? те же регулярные выражения.

И чем PEG лучше bison или yecc, которые у меня "под рукой" и за ними не нужно тянуться ХЗ куда?

И почему я должен писать PEG, например, для поиска какой-то фразы в редакторе, если регулярными выражениями делать это в разы проще?
The God is real, unless declared integer.
Re[2]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 02.01.11 10:25
Оценка:
Здравствуйте, netch80, Вы писали:

N>Не во всём. Если я правильно понял, о чём идёт речь, уже первое большое отличие в виде неограниченного потребления памяти может быть значительно хуже регулярных выражений.


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

N>О какой декомпозиции речь? Если о возможности при разборе сразу выделять грамматические элементы, то она уже есть в нормальном движке регулярных выражений, например:


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

N>Или ещё вопрос — это синтаксическое средство, а что на уровне лексики? Вот например pyPEG — какие там средства для лексического уровня? те же регулярные выражения.


в PEG не нужно разделение на синтаксис и лексику

N>И чем PEG лучше bison или yecc, которые у меня "под рукой" и за ними не нужно тянуться ХЗ куда?


а их тоже мало кто использует

N>И почему я должен писать PEG, например, для поиска какой-то фразы в редакторе, если регулярными выражениями делать это в разы проще?


почему это проще?
Re[3]: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.01.11 10:33
Оценка:
Здравствуйте, lurrker, Вы писали:

N>>Не во всём. Если я правильно понял, о чём идёт речь, уже первое большое отличие в виде неограниченного потребления памяти может быть значительно хуже регулярных выражений.

L>Неограниченное оно только теоретически. А практически оно ограничивается средствами движка, и все будет пучком :) Работать правда будет медленнее, но с другой стороны, в регэксах можно точно так же получить экспоненциальный бактрекинг, что значительно хуже.

Только в NFA, кои пишутся от лености душевной.

N>>О какой декомпозиции речь? Если о возможности при разборе сразу выделять грамматические элементы, то она уже есть в нормальном движке регулярных выражений, например:

L>Ну во первых, далеко не все движки это поддерживают. Во вторых, запись все равно очень неудобочитаемая.

С последним согласен, это фактически единственная осмысленная претензия к регулярным выражениям конкретного образца (а именно, идущих из Bell Unix basic regexps). С другой стороны, вспомним SQL оператор LIKE и его предшественники во всяких BASIC — они уже устроены совсем иначе.

N>>Или ещё вопрос — это синтаксическое средство, а что на уровне лексики? Вот например pyPEG — какие там средства для лексического уровня? те же регулярные выражения.

L>в PEG не нужно разделение на синтаксис и лексику

Можно и без него, но jIMHO неудобно.

N>>И чем PEG лучше bison или yecc, которые у меня "под рукой" и за ними не нужно тянуться ХЗ куда?

L>а их тоже мало кто использует

О каком именно мире речь? Если Windows — да, возможно. Если Unix — направо и налево, потому что они стандартны.

N>>И почему я должен писать PEG, например, для поиска какой-то фразы в редакторе, если регулярными выражениями делать это в разы проще?

L>почему это проще?

Ну представь себе — я ищу if.*foobar (помню, что в каком-то if оно проверялось)
Что я должен буду писать в PEG? Конструкцию из трёх элементов, два из которых фиксированы, а третий — что угодно? Я задолбусь рисовать такие вещи на каждый чих.
The God is real, unless declared integer.
Re[4]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 02.01.11 10:51
Оценка:
Здравствуйте, netch80, Вы писали:

N>Только в NFA, кои пишутся от лености душевной.


Э.. в смысле?
Насколько я понимаю, для любого движка можно написать регэкс, в котором бактреки будут плодиться как кролики.

N>Можно и без него, но jIMHO неудобно.


почему?

N>Ну представь себе — я ищу if.*foobar (помню, что в каком-то if оно проверялось)


странный какой-то регэкс. он у тебя заматчит foobar, который относится к другому ифу

N>Что я должен буду писать в PEG?


x = "if" .* "foobar"
Re[4]: почему вы используете регулярные выражения?
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.01.11 10:55
Оценка: :)
Здравствуйте, netch80, Вы писали:

N>>>И почему я должен писать PEG, например, для поиска какой-то фразы в редакторе, если регулярными выражениями делать это в разы проще?

L>>почему это проще?

N>Ну представь себе — я ищу if.*foobar (помню, что в каком-то if оно проверялось)

N>Что я должен буду писать в PEG? Конструкцию из трёх элементов, два из которых фиксированы, а третий — что угодно? Я задолбусь рисовать такие вещи на каждый чих.

Плюс ещё замена по регекспам.
Конечно, часть юзкейсов покрывается рефакторингом, но по моим ощущениям это меньше половины.
А вообще регекспы в редакторе — очень удобная вещь и если люди их не пользуют, то а) редактор не поддерживает (но это ставит вопрос по поводу редактора) б) они не умеют ими пользоваться (это ставит вопрос про разрабочиков, которые свои инструменты плохо знают, что ставит под сомнение их квалификацию)
Re[5]: почему вы используете регулярные выражения?
От: Klatu  
Дата: 02.01.11 12:25
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Плюс ещё замена по регекспам.


Ничто не мешает сделать замену по PEGам
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: почему вы используете регулярные выражения?
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.01.11 17:13
Оценка:
Здравствуйте, Klatu, Вы писали:

K>Здравствуйте, Курилка, Вы писали:


К>>Плюс ещё замена по регекспам.


K>Ничто не мешает сделать замену по PEGам


Только вот есть ощутимая разница между "пользоваться реальным инструментом сейчас" и "сделать"
Re: почему вы используете регулярные выражения?
От: Aen Sidhe Россия Просто блог
Дата: 02.01.11 18:48
Оценка:
Здравствуйте, lurrker, Вы писали:

L>Есть, например, PEG, который превосходит регэксы во всем.

L>Как минимум одно радикальное преимущество — это возможность делать декомпозицию. Что избавляет от необходимости писать такие вот жутики: http://stackoverflow.com/questions/2245282/what-is-the-longest-regular-expression-you-have-seen
L>Синтаксис приятнее, легче читается.
L>И тем не менее, основная масса по прежнему использует регэксы. Почему??

Потому что я где угодно могу написать new Regex(...).IsMatch и оно сработает.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[5]: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 02.01.11 20:20
Оценка:
Здравствуйте, lurrker, Вы писали:

N>>Только в NFA, кои пишутся от лености душевной.

1L>Э.. в смысле?
L>Насколько я понимаю, для любого движка можно написать регэкс, в котором бактреки будут плодиться как кролики.

Что-то не помню я такого, sorry. Ссылочку можно?

N>>Ну представь себе — я ищу if.*foobar (помню, что в каком-то if оно проверялось)

L>странный какой-то регэкс. он у тебя заматчит foobar, который относится к другому ифу

Они, если иное не сказано явно, работают в пределах строки.

N>>Что я должен буду писать в PEG?

L>x = "if" .* "foobar"

С каких пор .* стало элементом PEG?
И куда мне потом деть этот икс (гусары, молчать)?
The God is real, unless declared integer.
Re[6]: почему вы используете регулярные выражения?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 02.01.11 21:12
Оценка:
N>С каких пор .* стало элементом PEG?

с тех пор как такой синтаксис стал активно использоваться почти во всех грамматиках.

N>И куда мне потом деть этот икс (гусары, молчать)?


можно туда же, куда ты деваешь имена после ?P в регулярках.
Re: почему вы используете регулярные выражения?
От: Kerbadun  
Дата: 03.01.11 00:01
Оценка: :)
Здравствуйте, lurrker, Вы писали:

L>Есть, например, PEG, который превосходит регэксы во всем.

L>Как минимум одно радикальное преимущество — это возможность делать декомпозицию. Что избавляет от необходимости писать такие вот жутики: http://stackoverflow.com/questions/2245282/what-is-the-longest-regular-expression-you-have-seen

Кстати, декомпозицию можно и с регулярными выражениями делать — конкатенацией строк. Что мешает?

L>Синтаксис приятнее, легче читается.

L>И тем не менее, основная масса по прежнему использует регэксы. Почему??

1) Инерция, регэксы гораздо древнее PEG. Многие вообще про этот PEG не слышали никогда.
2) Во многих случаях регулярных выражений достаточно, тем более, сейчас уже стали допиливать движки регулярных выражений до таких возможностей, что у них от регулярных выражений только название.

Когда он умрет, его мозг заспиртуют в стакане
Re[6]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 03.01.11 04:24
Оценка:
Здравствуйте, netch80, Вы писали:

N>Что-то не помню я такого, sorry. Ссылочку можно?


А зачем тебе ссылочку? Надеюсь, месье не теоретик?
Вот простой практический пример:
регэкс (x+x+)+y применяешь к данным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, и движку становится очень-очень плохо.

N>Они, если иное не сказано явно, работают в пределах строки.


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

N>С каких пор .* стало элементом PEG?


не знаю. но вот, стало-с

N>И куда мне потом деть этот икс (гусары, молчать)?


туда же, куда ты деваешь результат от регэксов
Re[7]: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.01.11 09:06
Оценка:
Здравствуйте, DarkGray, Вы писали:

N>>С каких пор .* стало элементом PEG?


DG>с тех пор как такой синтаксис стал активно использоваться почти во всех грамматиках.


Значит, уходим от регулярных выражений по причине того, что они, мол, неудобные, кошмарный синтаксис, и тут же заимствуем ключевые элементы этого синтаксиса? По-моему, этот метод называется "двоемыслие".

N>>И куда мне потом деть этот икс (гусары, молчать)?


DG>можно туда же, куда ты деваешь имена после ?P в регулярках.


Нет, ты не понял. Покажи по символам, как подобный PEG использовать в задаче поиска строки в редакторе. Ну набрал я это выражение в каком-то соответствующем промпте — и что?
The God is real, unless declared integer.
Re[7]: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.01.11 09:08
Оценка:
Здравствуйте, lurrker, Вы писали:

N>>Что-то не помню я такого, sorry. Ссылочку можно?


L>А зачем тебе ссылочку? Надеюсь, месье не теоретик? :))

L>Вот простой практический пример:
L>регэкс (x+x+)+y применяешь к данным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, и движку становится очень-очень плохо.

Попробовал. Питоновому (2.6) — поплохело. Перловому (5.10.1) — нет, даже когда я ещё в два раза больше иксов написал, чем ты предложил; вообще, его время оказалось линейным по длине образца в диапазоне до двух тысяч. Что и требовалось доказать. Это ты у нас строишь теории на своём незнании.
Почему питоновый такой случай не выдержал — не знаю детально (помню только, что перловый специально точили на суперзаумные выражения с матчингом между частями), но такой искусственный пример совершенно не интересен, мне интересны только практически реальные случаи.

С другой стороны, а что, если воспроизвести такой пример в PEG — он будет работать лучше? Я очень сомневаюсь.

N>>С каких пор .* стало элементом PEG?

L>не знаю. но вот, стало-с

Если есть такое, значит, это PEG с синтаксисом регэкспов. И кому он нужен, если целью тут предлагалось именно избавление от этого кошмарящего их и тебя синтаксиса?

N>>И куда мне потом деть этот икс (гусары, молчать)?

L>туда же, куда ты деваешь результат от регэксов :))

Вообще-то вначале надо его применить в качестве выражения для поиска, а не результата. Результат мне в редакторе как таковой не нужен, нужно место срабатывания поиска.
The God is real, unless declared integer.
Re[8]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 03.01.11 09:21
Оценка:
Здравствуйте, netch80, Вы писали:

N>Попробовал. Питоновому (2.6) — поплохело. Перловому (5.10.1) — нет, даже когда я ещё в два раза больше иксов написал, чем ты предложил; вообще, его время оказалось линейным по длине образца в диапазоне до двух тысяч. Что и требовалось доказать.


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

N>Это ты у нас строишь теории на своём незнании.


Не груби.

N>Почему питоновый такой случай не выдержал — не знаю детально


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

N>(помню только, что перловый специально точили на суперзаумные выражения с матчингом между частями), но такой искусственный пример совершенно не интересен, мне интересны только практически реальные случаи.


Если тебе интересны только практически реальные случаи, зачем ты заговорил о проблемах в PEG? практическая реальность у них еще меньше.

N>С другой стороны, а что, если воспроизвести такой пример в PEG — он будет работать лучше? Я очень сомневаюсь.


В нем такой проблемы вообще не будет, если этот пример взять дословно. Там квантификаторы немного по другому работают. Этот пример тоже можно воспроизвести, но для этого придется уже сильно попрыгать с бубном.

N>Если есть такое, значит, это PEG с синтаксисом регэкспов. И кому он нужен, если целью тут предлагалось именно избавление от этого кошмарящего их и тебя синтаксиса?


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

N>Вообще-то вначале надо его применить в качестве выражения для поиска, а не результата. Результат мне в редакторе как таковой не нужен, нужно место срабатывания поиска.


Точно так же и применить. Правда, таких инструментов пока нет, это действительно камень в огород PEG
Re[9]: почему вы используете регулярные выражения?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.01.11 10:03
Оценка:
Здравствуйте, lurrker, Вы писали:

N>>Попробовал. Питоновому (2.6) — поплохело. Перловому (5.10.1) — нет, даже когда я ещё в два раза больше иксов написал, чем ты предложил; вообще, его время оказалось линейным по длине образца в диапазоне до двух тысяч. Что и требовалось доказать.

L>Это доказывает только то, что разработчики перлового движка отошли от стандарта. Потому что при стандартной интерпретации этого выражения, там должны быть катастрофические бактреки.

Адекватность интерпретации проверяется тестами. Покажи тест, который перловый движок выполняет иначе (то есть даёт другие результаты), чем положено по спецификации, и я соглашусь. Если нет — останусь при своём мнении.

N>>Это ты у нас строишь теории на своём незнании.

L>Не груби.

Зачэм груби, дарагой? Всего лишь прямолинейная констатация факта: ты не знал, что могут быть другие результаты, но настоял, что все движки без ограничения должны страдать от этого. Я показал живой, тривиально проверяемый пример — ты не соглашаешься — мол, он что-то нарушает. Почему бы тебе не предположить, что это именно ты что-то не знаешь, а не те умные и опытные ребята, что пишут Perl?

N>>Почему питоновый такой случай не выдержал — не знаю детально

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

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

N>>(помню только, что перловый специально точили на суперзаумные выражения с матчингом между частями), но такой искусственный пример совершенно не интересен, мне интересны только практически реальные случаи.

L>Если тебе интересны только практически реальные случаи, зачем ты заговорил о проблемах в PEG? практическая реальность у них еще меньше.

Затем, что если мы тут сравниваем регэкспы с PEG, я хочу какой-то систематичности в сравнении. Мы можем сравнивать по следующим параметрам:
1. Наглядность. Для многих регэкспы — иероглифы, и им легче читать грамматику. Что ж, я тут ничуть не возражаю.
2. Удобство применения в простых случаях (здесь и далее удобство рассматривается в контексте отсутствия религиозных возражений или проблем пункта 1). Как мне кажется, регэкспы удобнее в подавляющем большинстве случаев.
3. Принципиальная возможность применения в сложных случаях. Например, регэкспами можно взять подавляющее большинство грамматик, но, как в примере в начале этой темы, они будут содержать over 9000 символов, и искать проблемы движка, например, в этом будет крайне сложно.
4. Удобство применения в сложных случаях.

Так вот — у меня принципиальный вопрос: что я выиграю от использования PEG и, главное, по сравнению с чем? У меня есть, например, регэкспы для простых случаев. Есть грамматические средства (bison, yecc...) для сложных. PEG фактически представляет собой гибрид "стандартного lex" и "стандартного yacc" как классов софта. Если меня не устраивает стандартный lex? Например, gcc не использует стандартный lex, потому что грамматика Си даёт разные выражения от того, чем является идентификатор — переменной, именем типа, меткой, чем-то ещё; но он использует стандартный yacc (в виде bison). В случае lex+yacc я могу достаточно гибко разделить эти два слоя; цена вопроса — предкомпиляция. Зачем мне PEG? Он не даёт ничего нового...

Хорошо, явно задамся задачей именно оправдать применение PEG. Получается одна относительно специфическая задача — грамматический разбор текста с построением дерева разбора. Так?

N>>С другой стороны, а что, если воспроизвести такой пример в PEG — он будет работать лучше? Я очень сомневаюсь.

L>В нем такой проблемы вообще не будет, если этот пример взять дословно. Там квантификаторы немного по другому работают. Этот пример тоже можно воспроизвести, но для этого придется уже сильно попрыгать с бубном.

Отлично. Осталось понять, на кой аккредитив вообще тебе потребовалось показывать заведомо искусственный пример, который не соответствует AFAIU ни одной реальной грамматике (это чтобы войти в ту область задач, в которой сравнение с PEG вообще имеет смысл).

N>>Если есть такое, значит, это PEG с синтаксисом регэкспов. И кому он нужен, если целью тут предлагалось именно избавление от этого кошмарящего их и тебя синтаксиса?

L>Синтаксис там другой, просто позаимствовали удачные находки и исправили косяки.

`.*' это удачная находка? Дело ваше, конечно, но я неоднократно слышал/читал жалобы именно на эту конструкцию как на "базовый кошмар" регэкспов. Почему бы не взять вместо этого один из стандартных/распространённых синтаксисов BNF?

N>>Вообще-то вначале надо его применить в качестве выражения для поиска, а не результата. Результат мне в редакторе как таковой не нужен, нужно место срабатывания поиска.

L>Точно так же и применить. Правда, таких инструментов пока нет, это действительно камень в огород PEG

Ну вот когда появятся — можно будет сравнивать удобство. Пока что "измерить температуру забортной воды невозможно за отсутствием таковой".
The God is real, unless declared integer.
Re[8]: почему вы используете регулярные выражения?
От: hardcase Пират http://nemerle.org
Дата: 03.01.11 11:25
Оценка:
Здравствуйте, netch80, Вы писали:

L>>Вот простой практический пример:

L>>регэкс (x+x+)+y применяешь к данным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, и движку становится очень-очень плохо.

N>Попробовал. Питоновому (2.6) — поплохело. Перловому (5.10.1) — нет, даже когда я ещё в два раза больше иксов написал, чем ты предложил; вообще, его время оказалось линейным по длине образца в диапазоне до двух тысяч.


Мне казалось в Перле уже давно за "регекспами" прячется этот самый PEG. Народ, правда этого не замечает.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: почему вы используете регулярные выражения?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 03.01.11 12:19
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, netch80, Вы писали:


L>>>Вот простой практический пример:

L>>>регэкс (x+x+)+y применяешь к данным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, и движку становится очень-очень плохо.

N>>Попробовал. Питоновому (2.6) — поплохело. Перловому (5.10.1) — нет, даже когда я ещё в два раза больше иксов написал, чем ты предложил; вообще, его время оказалось линейным по длине образца в диапазоне до двух тысяч.


H>Мне казалось в Перле уже давно за "регекспами" прячется этот самый PEG. Народ, правда этого не замечает.


PEG это все таки нотация, как и regexp. PEG содержит регулярное подмножество, которое может быть разобрано за линейное время, regexp далеко не всегда преобразуется в КА, особенно с расширениями, поэтому часто работает с откатами (а в перле и подавно). Просто народ знает название regexp и не знает названия peg.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.