Как выучить регулярные выражения - PullRequest
0 голосов
/ 10 декабря 2010

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

Я хочу иметь алгоритм для этого. То есть ввод этого алгоритма представляет собой список слов, а вывод - регулярное выражение. Очевидно, будут некоторые ограничения. Как и регулярное выражение всегда будет соответствовать большему количеству слов, если оно должно соответствовать бесконечному количеству слов, и я даю ему только конечное количество слов. Или мне понадобится более компактное представление ввода. Или я также подумываю о предоставлении мне некоторого регулярного выражения в качестве входных данных и списка дополнительных слов, и я хочу получить регулярное выражение, которое соответствует всем им вместе (и, возможно, больше). В любом случае, он должен попытаться создать регулярное выражение, максимально простое.

Какие существуют методы, которые могут это сделать?


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


Снова сформулировано немного по-другому:

Пусть L - обычный язык. Пусть M_n - конечное подмножество в L с n элементами. Пусть M_n является подмножеством M_ (n + 1).

Я хочу иметь алгоритм LRE, который получает конечный набор слов и выводит регулярное выражение. И я хочу иметь собственность:

lim_n-> бесконечность | diff (LRE (M_n), L) | = 0

Ответы [ 6 ]

2 голосов
/ 10 декабря 2010

Посетите этот сайт, чтобы узнать общие принципы: http://www.regular -expressions.info /

Если все, что у вас есть, это список слов, таких как dog, cat, cow, mouse, простейшее регулярное выражение для соответствия любому из них будет: dog|cat|cow|mouse, но обратите внимание, что оно также будет соответствовать doggone, scatological и т. д. ... Может совпадать или не совпадать с DOGGONE, COWPATTYи т. д ... в зависимости от того, выполняете ли вы сопоставление с учетом регистра.Более точные шаблоны могут быть предоставлены, если будут даны более подробные сведения о вашей проблеме.

Также неплохо получить инструмент тестирования регулярных выражений.Мне нравится Expresso, он хорош для шаблонов .NET.Поскольку возможности регулярных выражений могут различаться в зависимости от платформы, убедитесь, что ваш инструмент поддерживает вашу платформу.

1 голос
/ 21 декабря 2010

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

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

0 голосов
/ 10 декабря 2010

Вот сайт для Perl Regex:

http://perldoc.perl.org/perlre.html
0 голосов
/ 10 декабря 2010

http://www.regular -expressions.info - фантастический сайт для справочника Regex.

При создании сложного регулярного выражения я обычно использую Expresso.Это бесплатное приложение, которое поможет вам создавать регулярные выражения.Он разбивает их на древовидную структуру, чтобы было легко увидеть, что делают все части.http://www.ultrapico.com/Expresso.htm Он предназначен для работы с языками .NET, но существует множество подобных инструментов, доступных для разных языков.

Для построения своего Regex я обычно начинаю с приемлемого значения иначать замену символов синтаксисом Regex.

Например, если бы я пытался сопоставить URL-адрес, я бы начал с

http://www.mydomain.com

Я бы тогда избежал всего, что требует экранирования

http://www\.mydomain\.com

тогда я бы начал заменять символы

http://www\.\w+\.\w+\.\w+

, очевидно, это выражение требует дополнительной работы, но вы поняли идею

0 голосов
/ 10 декабря 2010

Если у вас есть список отдельных слов, которые вы хотите сопоставить - это не похоже на совпадение с чем-то, с чем лучше всего справляется регулярное выражение.

As FrustratedWithFormsDesigner указал - ваше регулярное выражение будет отображаться в списке элементов в худшем случае;В лучшем случае вы можете найти общие префиксы.И если вы автоматизируете конструкцию регулярного выражения, зачем беспокоиться о регулярном выражении?Каков вариант использования?

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

0 голосов
/ 10 декабря 2010

Используйте этот сайт для изучения основ и используйте Рубуляр для тестирования в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...