2009-03-12 4 views
2

Я использую regex buddy, который принимает регулярное выражение, а затем выдает значение, из которого получается то, что он может делать? Аналогичным образом можно ли иметь некоторый движок, который берет ввод естественного языка, описывающий шаблон, который нужно сопоставить/заменить, и выдает правильное (почти правильное) регулярное выражение для этого описания?Построение регулярного выражения

например. Сопоставьте целое слово 'Dio' в каком-то файле

Так регулярное выражение для этого может быть: <dio> или

\ bdio \ б

-Ad.

P.S. = Я думаю, что немногие ребята могут подумать об этом как о «субъективном» вопросе, не связанном с программированием, но мне просто нужно задать этот вопрос тем не менее. Для меня. - Благодаря.

+0

похоже: http://stackoverflow.com/questions/616292/is-it-possible-to-learn-a-regular-expression-by-user-provided-examples –

+0

почти то же самое: http: // stackoverflow .com/questions/629573/why-cant-regular-expressions-use-keywords-than-characters – innaM

+0

также очень близко: http://stackoverflow.com/questions/500839/regular-expression-compiler – innaM

ответ

0

Да, я согласен с тобой, что это subjective. Но я отвечу на ваш вопрос, потому что думаю, что вы задали неправильный вопрос.

Ответ: «ДА». Почти все можно закодировать, и это будет довольно простое приложение для кодирования. Будет ли он работать отлично? Нет, это не потому, что естественный язык достаточно сложный для анализа и интерпретации. Но можно написать такой движок с некоторыми ограничениями.

2

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

Регулы были разработаны по какой-либо причине - они являются самым простым и точным представлением.

Для Emacs есть пакет Symbolix Regular Expression Builder, но, глядя на него, я считаю, что регулярные выражения легче работать.

1

Короткий ответ: нет, пока искусственный интеллект не улучшит МНОГО.

Если вы написали что-то вроде этого, у вас будет очень ограниченный синтаксис. Для кого-то, кто знает «Сопоставьте все слово« dio »в каком-то файле», они в основном должны обладать значительными знаниями о регулярных выражениях. В этот момент просто используйте регулярные выражения.

Для нетехнических пользователей это никогда не будет работать, если вы не ограничиваете его базовым «найти эту фразу» или, может быть, «найти строки, начинающиеся/заканчивающиеся на?». Они никогда не придумают что-то вроде этого:

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

Это моя попытка версии открытым текстом этого относительно простого регулярного выражения:

/<img(\s+[a-z]+=("[^"]*"|'[^']*'))+\s*/>/i 
0

Создание регулярных выражений через использование естественного языка процессора вполне возможно. Предполагается, что Prolog будет хорошим выбором языка для такого рода проблем.На практике, однако, то, что вы будете делать, по сути, является разработка собственного языка ввода, который обеспечивает регулярное выражение как результат. Если ваша цель состоит в создании регулярных выражений для конкретной задачи, это может быть полезно. Возможно, задача, которую вы выполняете, имеет тенденцию требовать определенных формулировок, которые выполняются, но не встроены в регулярные выражения. Хотя будет ли это более эффективным, чем просто создание регулярных выражений по одному, зависит от вашего проекта. Обычно это, вероятно, не так, поскольку ваш собственный язык не будет таким же хорошо известным или хорошо документированным как регулярное выражение. Если вы хотите создать замену регулярному выражению, результат которого будет анализироваться как регулярное выражение, я думаю, вы много просите. Не сказать, что люди раньше не делали того же самого (например, язык C++ как «улучшение», которое выполняется, первоначально, на C++).

0

попробуйте приложение с открытым исходным кодом Mac Ruby Regexp Machine, по адресу http://www.rubyregexp.sf.net. Он написан в рубине, поэтому вы можете использовать некоторый код, даже если вы не на Mac. Вы можете описать множество простых регулярных выражений в простой английской грамматике. В качестве раскрытия я сделал этот инструмент.