Re[12]: почему вы используете регулярные выражения?
От: WolfHound  
Дата: 11.01.11 23:15
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Странно. У меня как правило ограничивается. Для задач посложнее есть более профильные средства.

Какие?
Можешь показать мне парсер C#4 который работает со скоростью 4 метра в секунду с построением АСТ?

ВВ>Полтора миллиона ссылок на что? Причем тут "regexp html parse"? Да и вообще html?

ВВ>Если ты хочешь порекомендовать какую-то реализацию ПЕГ для дотнета, то не мог бы привести ссылку по-конкретнее?
Да куда уж конкретнее. Народ использует регексы для разбора html.
Они просно не понимают что значит рекурсивная грамматика.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: почему вы используете регулярные выражения?
От: Воронков Василий Россия  
Дата: 12.01.11 03:16
Оценка: +2 :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Воронков Василий, Вы писали:

ВВ>>Странно. У меня как правило ограничивается. Для задач посложнее есть более профильные средства.
WH> Какие?

Генераторы парсеров.

WH>Можешь показать мне парсер C#4 который работает со скоростью 4 метра в секунду с построением АСТ?


"парсер C#4 который работает со скоростью 4 метра в секунду с построением АСТ" — это не средство, а некая целевая задача. Надо сказать не сильно мне близкая. Поясню, если ты не понял — под более профильными средствами я имел в виду такие средства как CoCo/R, ANTLR, тот же PEG.

ВВ>>Полтора миллиона ссылок на что? Причем тут "regexp html parse"? Да и вообще html?

ВВ>>Если ты хочешь порекомендовать какую-то реализацию ПЕГ для дотнета, то не мог бы привести ссылку по-конкретнее?
WH>Да куда уж конкретнее. Народ использует регексы для разбора html.
WH>Они просно не понимают что значит рекурсивная грамматика.

Какое это имеет отношение к обсуждаемой теме? Я спрашивал, какую реализацию ПЕГ ты мне можешь порекомендовать для использования в C# — чтобы с ней было работать так же легко, как и с регексами, без танцев с бубном. А ты мне приводишь ссылки в стиле "какие все идиоты".
Re[17]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 04:48
Оценка: -1
Здравствуйте, Klatu, Вы писали:

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


O>>Зачем мне парсер сишарпа? У меня все примитивнее, всякие там валидейшены телефонов, емейлов и прочего хлама.


K>Валидация емэйлов — не особо тривиальная задача. Регэкс на 6 кбайт, который упоминается в первом сообщении — он как раз для этого.

K>Хотя, если подумать, он действительно умещается в строку кода. Ну а то, что строка на 6 килобайт и никто кроме Джона Нэша не сможет ее прочитать — про это ты скромно умолчал?

А зачем его читать? Он доступен как библиотечный метод
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[7]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 04:55
Оценка:
Здравствуйте, lurrker, Вы писали:

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

L>регэкс (x+x+)+y применяешь к данным xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, и движку становится очень-очень плохо.
И в чем же практическая ценность сего "практического примера"?
Осмысленный пример есть какой-нибудь?
А то бреда можно всякого много нагенерить
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 12.01.11 05:03
Оценка:
Здравствуйте, jazzer, Вы писали:

J>И в чем же практическая ценность сего "практического примера"?

J>Осмысленный пример есть какой-нибудь?
J>А то бреда можно всякого много нагенерить

Практический смысл этого примера — вот здесь. Разработчики Hotmail тоже думали, что регэксы хорошо известны и предсказуемы, за что и поплатились.
Еще есть вопросы?
Re[10]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 12.01.11 05:05
Оценка: -1
Здравствуйте, mrTwister, Вы писали:

T>Ну тогда вот так:


А почему бы сразу не заменить на "x+yx+", раз уж ты решил взять на себя роль компилятора?
Re[11]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:09
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


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


ВВ>Ну в данном случае как раз вы ткнули пальцем в небо и "в защиту" регексов привели их реализацию, которая, собственно говоря, вообще не является регулярными выражениями. В Перле с помощью "регексов" можно выразить нерегулярную грамматику. Да, ребята там опытные, и они молодцы, но то, что они сделали регулярными выражениями не является уже просто по определению. И приводить их реализацию в защиту регексов несколько странно, не находите?


ВВ>

ВВ>Now, Perl's regexps "aren't" -- that is, they aren't "regular" because backreferences per sed and grep are also supported, which renders the language no longer strictly regular and so forbids "pure" DFA implementations.


ВВ>http://www.perl.com/doc/FMTEYEWTK/regexps.html


Ну потому что под регэкспами понимают то, что реально используется, а не какие-то построения математиков.
А везде используются именно перловые регэкспы, с блэкджеком и бэкреференсами. Причем "везде" — это практически буквально везде: в любом языке есть библиотека для поддержки перловых регэкспов. И вот это люди и называют регэкспами, и никого с практической точки зрения не волнует, что это не канонические регулярные выражения.
Спуститесь на землю уже.

Так что перловая реализация совершенно правильно здесь приведена, если, конечно, эта дискуссия имеет хоть какое-то отношение к реальной программистской практике, а не крутится только вокруг чистой математики.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[11]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:11
Оценка:
Здравствуйте, lurrker, Вы писали:

L>Например, вот так:

L>
L>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlmnopqrstuvwyz
L>^.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*l+m+n+o+p+q+r+s+t+u+v+w+y+z+$
L>


А есть хоть капля смысла в таком вот регэкспе?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[9]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:15
Оценка:
Здравствуйте, lurrker, Вы писали:

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


J>>И в чем же практическая ценность сего "практического примера"?

J>>Осмысленный пример есть какой-нибудь?
J>>А то бреда можно всякого много нагенерить

L>Практический смысл этого примера — вот здесь. Разработчики Hotmail тоже думали, что регэксы хорошо известны и предсказуемы, за что и поплатились.

L>Еще есть вопросы?
Вопрос один: ты сам-то прочитал то, что написанно в твоей ссылке?

Here's an unrealistic but tiny example, to get the flavor across:

Где тут практический смысл?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[12]: почему вы используете регулярные выражения?
От: Воронков Василий Россия  
Дата: 12.01.11 05:28
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Так что перловая реализация совершенно правильно здесь приведена, если, конечно, эта дискуссия имеет хоть какое-то отношение к реальной программистской практике, а не крутится только вокруг чистой математики.


В таком случае вся эта дискуссия — не более чем обсуждение нюансов синтаксиса. Если в обоих случаях мы получаем все тот же ПЕГ, но только в разной упаковке.
Re[13]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:39
Оценка: :)
Здравствуйте, Воронков Василий, Вы писали:

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


J>>Так что перловая реализация совершенно правильно здесь приведена, если, конечно, эта дискуссия имеет хоть какое-то отношение к реальной программистской практике, а не крутится только вокруг чистой математики.


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

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

Но главное у регэкспов есть фичи, которых нету у чистого пега — обратные ссылки, например.
Плюс есть стандартный синтаксис замены, которого у пега просто нету, только DarkGray привел пример реализации его внутренней и никому не доступной библиотеки, а стандарта нет.
Не говоря уже о вычислимых радостях типа "(?(condition)yes-pattern|no-pattern)", это если не говорить о том, что непосредственно в регэксп можно код загнать.

Тот же Boost.Spirit, хоть у него и написано на первой странице, что он реализует PEG, на cамом деле предоставляет гораздо больше, чем чистый ПЕГ (в результате — примерно то же, что и перловые регэкспы).
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[10]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 12.01.11 05:43
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Вопрос один: ты сам-то прочитал то, что написанно в твоей ссылке?

J>

J>Here's an unrealistic but tiny example, to get the flavor across:

J>Где тут практический смысл?

Это упрощенный пример, вместо полного выражения. У тебя это вызывает какие-то затруднения?
Re[14]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 12.01.11 05:48
Оценка: -1
Здравствуйте, jazzer, Вы писали:

J>Но главное у регэкспов есть фичи, которых нету у чистого пега — обратные ссылки, например.


Не вижу в них особой необходимости.

J>Не говоря уже о вычислимых радостях типа "(?(condition)yes-pattern|no-pattern)",


Элементарно делается в пег.

J>Тот же Boost.Spirit, хоть у него и написано на первой странице, что он реализует PEG, на cамом деле предоставляет гораздо больше, чем чистый ПЕГ (в результате — примерно то же, что и перловые регэкспы).


Нет, не примерно то же. У регэксов родовая проблема — катастрофические бактреки, на которые всегда можно наступить в неожиданном месте.
Re[11]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:52
Оценка: +1 -2
Здравствуйте, lurrker, Вы писали:

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


J>>Вопрос один: ты сам-то прочитал то, что написанно в твоей ссылке?

J>>

J>>Here's an unrealistic but tiny example, to get the flavor across:

J>>Где тут практический смысл?

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

Да, вызывает, ибо этот упрощенный пример не имеет никакого смысла. Я хочу видеть реальное выражение, потому что x+x+, очевидно, эквивалентно просто x+. И дополнительный плюиск вокруг тоже смысла не имеет.
А то так можно и на Си наехать, типа что-то у меня долго выполняется цикл
for(;;){}
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[12]: почему вы используете регулярные выражения?
От: lurrker  
Дата: 12.01.11 05:52
Оценка:
Здравствуйте, jazzer, Вы писали:

J>А есть хоть капля смысла в таком вот регэкспе?


Конечно. Ты разве не умеешь читать регэксы?
Re[15]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 05:59
Оценка: -1
Здравствуйте, lurrker, Вы писали:

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


J>>Но главное у регэкспов есть фичи, которых нету у чистого пега — обратные ссылки, например.

L>Не вижу в них особой необходимости.
http://www.rsdn.ru/forum/philosophy/4103343.1.aspx
Автор: jazzer
Дата: 04.01.11


L>Нет, не примерно то же. У регэксов родовая проблема — катастрофические бактреки, на которые всегда можно наступить в неожиданном месте.

Открой для себя конструкцию (?>pattern)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: почему вы используете регулярные выражения?
От: jazzer Россия Skype: enerjazzer
Дата: 12.01.11 06:00
Оценка: +1
Здравствуйте, lurrker, Вы писали:

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


J>>А есть хоть капля смысла в таком вот регэкспе?


L>Конечно. Ты разве не умеешь читать регэксы?


Умею, и в этом регэкспе ни на грош смысла не вижу. Снизойди, будь так добр.
Если смысл не в том, чтоб просто пофлеймить, конечно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[11]: почему вы используете регулярные выражения?
От: mrTwister Россия  
Дата: 12.01.11 06:04
Оценка: +1 -2
Здравствуйте, lurrker, Вы писали:

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


T>>Ну тогда вот так:


L>А почему бы сразу не заменить на "x+yx+", раз уж ты решил взять на себя роль компилятора?


А какая связь?
Нигде не написано, что регэкспы обязаны работать с исбользованием бэктрекинга (далее БТ). Так уж вышло, что стандартный Regex не имеет настройки, которая бы глобально отключала БТ, ну и хрен с ним, тривиальная строчка кода и мы автоматически отключаем БТ по группам. Вместо этого можно было бы сразу использовать библиотеку регэекспов, реализующая лбой из алгоритмов парсинга без БТ. Да просто это мало кому надо. Это надо только если мы получаем выражние откуда-то из внешних источников, а это мягко говоря нетипично.

Ну а в реальной жизни я естественно бы написал бы xx+yxx+. Ну либо использовал бы стандартный синтаксис для отключения БТ для подвыражения: (?>x+x+)+y(?>x+x+)+ (это кстати говоря к слову о том, что регэкспы, якобы, не позволяют ограничивать БТ )
лэт ми спик фром май харт
Re[15]: почему вы используете регулярные выражения?
От: mrTwister Россия  
Дата: 12.01.11 06:18
Оценка: +1 -2 :)
Здравствуйте, lurrker, Вы писали:

L>Нет, не примерно то же. У регэксов родовая проблема — катастрофические бактреки, на которые всегда можно наступить в неожиданном месте.

1) В неожиданном месте на них наступить можно только по незнанию либо по глупости.
2) Существует общепринятый синтаксис, отключающий бэктрекинг для подгруппы.
3) С чего ты взял, что реализация регулярных выражений обязана использовать бэктрекинг?
лэт ми спик фром май харт
Re[12]: почему вы используете регулярные выражения?
От: mrTwister Россия  
Дата: 12.01.11 06:29
Оценка: +1 -3
Здравствуйте, jazzer, Вы писали:

J>Ну потому что под регэкспами понимают то, что реально используется, а не какие-то построения математиков.

J>А везде используются именно перловые регэкспы, с блэкджеком и бэкреференсами. Причем "везде" — это практически буквально везде: в любом языке есть библиотека для поддержки перловых регэкспов. И вот это люди и называют регэкспами, и никого с практической точки зрения не волнует, что это не канонические регулярные выражения.
J>Спуститесь на землю уже.

J>Так что перловая реализация совершенно правильно здесь приведена, если, конечно, эта дискуссия имеет хоть какое-то отношение к реальной программистской практике, а не крутится только вокруг чистой математики.


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