Я пишу утилиту Java, которая помогает мне генерировать множество данных для тестирования производительности. Было бы действительно здорово иметь возможность указать регулярное выражение для строк, чтобы мой генератор выдавал то, что соответствует этому. Есть ли что-то уже запеченное, что я могу использовать для этого? Или есть библиотека, которая помогает мне больше всего?
Спасибо
Ответы:
Изменить: как упоминалось в комментариях, для этого в Google Code доступна библиотека: https://code.google.com/archive/p/xeger/
См. Также https://github.com/mifmif/Generex, предложенный Mifmif
Оригинал сообщения:
Во-первых, я считаю, что с достаточно сложным регулярным выражением это может быть невозможно. Но вы должны уметь собрать что-нибудь для простых регулярных выражений.
Если вы посмотрите на исходный код класса java.util.regex.Pattern, вы увидите, что он использует внутреннее представление экземпляров Node. Каждый из различных компонентов шаблона имеет собственную реализацию подкласса Node. Эти узлы организованы в виде дерева.
Создав посетителя, который проходит по этому дереву, вы должны иметь возможность вызвать перегруженный метод генератора или какой-то конструктор, который что-то собирает вместе.
источник
[\w]
. Об этом нам говорит последняя строка их вики .dk.brics.automaton
поэтому будьте готовы добавить сторонние зависимости pom. Большинство людей не возражают против этого, но я бы хотел, чтобы было что-то более компактное.Слишком поздно помогать оригинальному плакату, но он может помочь новичку. Generex - полезная библиотека Java, которая предоставляет множество функций для использования регулярных выражений для генерации строк (случайное создание, генерация строки на основе ее индекса, генерация всех строк ...).
Пример :
Раскрытие
Проект, упомянутый в этом посте, принадлежит пользователю, отвечающему (Mifmif) на вопрос. По правилам , это нужно поднять.
источник
Xeger (Java) тоже может это делать:
источник
Я пошел в корень, развернув для этого свою собственную библиотеку (на C #, но это должно быть легко понять для Java-разработчика).
Rxrdg начался как решение проблемы создания тестовых данных для реального проекта. Основная идея состоит в том, чтобы использовать существующие шаблоны проверки (регулярное выражение) для создания случайных данных, которые соответствуют таким шаблонам. Таким образом создаются действительные случайные данные.
Написать парсер для простых шаблонов регулярных выражений не так уж и сложно. Использование абстрактного синтаксического дерева для создания строк должно быть еще проще.
источник
В подкасте stackoverflow 11:
Вероятно, это не то, что вы ищете, но это может быть хорошей отправной точкой, вместо того, чтобы создавать свою собственную.
Мне кажется, что я ничего не могу найти в Google, поэтому я предлагаю решить эту проблему путем разбора данного регулярного выражения на мельчайшие единицы работы (\ w, [xx], \ d и т. Д.) И написания некоторых основных методов для поддержки эти фразы регулярного выражения.
Итак, для \ w у вас будет метод getRandomLetter (), который возвращает любую случайную букву, и у вас также будет getRandomLetter (char startLetter, char endLetter), который дает вам случайную букву между двумя значениями.
источник
Вопрос действительно старый, хотя для меня проблема была актуальна. Я пробовал xeger и Generex, и, похоже, они не соответствуют моим требованиям. На самом деле они не могут обрабатывать некоторые шаблоны регулярных выражений (например
a{60000}
), а для других (например(A|B|C|D|E|F)
) они просто не создают всех возможных значений. Поскольку другого подходящего решения я не нашел - создал свою библиотеку.https://github.com/curious-odd-man/RgxGen
Также есть артефакт на центральном сервере maven.
Пример использования:
источник
Я знаю, что есть уже принятый ответ, но я использую генератор данных RedGate (тот, который упоминается в ответе Крейга), и он ДЕЙСТВИТЕЛЬНО работает для всего, что я ему бросил. Это быстро, и поэтому мне хочется использовать одно и то же регулярное выражение для генерации реальных данных для таких вещей, как коды регистрации, которые эта штука выплевывает.
Требуется регулярное выражение вроде:
и генерирует множество уникальных кодов, например:
Это какой-то большой секретный алгоритм, который разработал RedGate, и нам всем не повезло, или это то, что мы, простые смертные, действительно могли сделать?
источник
Я в полете и только что увидел вопрос: я написал самое простое, но неэффективное и неполное решение. Надеюсь, это поможет вам начать писать собственный парсер:
источник
Вам придется написать свой собственный парсер, как это сделал автор String :: Random (Perl). Фактически, он нигде в этом модуле не использует регулярные выражения, это просто то, к чему привыкли Perl-кодеры.
С другой стороны, может быть, вы можете взглянуть на источник , чтобы получить некоторые указатели.
РЕДАКТИРОВАТЬ: Черт, Блэр опередила меня на 15 секунд.
источник
Он далек от поддержки полного регулярного выражения PCRE, но я написал следующий метод Ruby, чтобы взять строку, похожую на регулярное выражение, и создать ее вариант. (Для CAPTCHA на основе языка.)
источник
Это очень старый вопрос, но я наткнулся на него во время собственного поиска, поэтому я добавлю пару ссылок для тех, кто может искать те же функции на других языках.
источник
Если вы хотите сгенерировать «критические» строки, вы можете рассмотреть:
EGRET http://elarson.pythonanywhere.com/, который генерирует «злые» строки, покрывающие ваши регулярные выражения.
MUTREX http://cs.unibg.it/mutrex/, который генерирует строки обнаружения ошибок путем мутации регулярного выражения
Оба являются академическими инструментами (я один из авторов последнего) и работают достаточно хорошо.
источник