Получить допустимое соответствие для регулярного выражения

#php #regex

#php #регулярное выражение

Вопрос:

Hej,

Я делаю проект, который включает в себя тест. Множественный выбор и ввод текста в качестве ответов. Для проверки ответов на ввод текста существует регулярное выражение. Например:

Как называется эта операция: 3 5. Возможные ответы: Сложение, addition, Плюс, plus, Sum, сумма, RegEx: /^((A|a)ddition|(P|p)lus|(S|s)um| )$/

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

Итак, мой вопрос таков: существует ли php-функция, которая выдает мне допустимую строку для любого заданного регулярного выражения?

Нравится: echo 'Your answer is wrong, '.valid_pattern($theRegEx).' would have been better.';

Заранее спасибо

Комментарии:

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

2. я думаю, вам лучше хранить все возможные ответы в массиве an (объедините это с foreach и stripos), а затем извлекать элемент, когда вам нужен пример (в отличие от попыток выполнить обратное регулярное выражение)

3. Если вы собираетесь делать это с регулярным выражением, тогда рассмотрите возможность использования разных регистров для каждой буквы в каждом слове, а не только для первой буквы. Тогда вы можете избавить себя от некоторых хлопот и использовать флаг без учета регистра, i например /^(addition|plus|sum| )$/i

Ответ №1:

Если вы хотите сгенерировать образец данных с использованием регулярного выражения, вы можете проверить в ReverseRegex php project.

https://github.com/icomefromthenet/ReverseRegex

Здесь у вас есть пример с его страницы:

 use ReverseRegexLexer;
use ReverseRegexRandomSimpleRandom;
use ReverseRegexParser;
use ReverseRegexGeneratorScope;

# load composer
require "vendor/autoload.php";

$lexer = new  Lexer('[a-z]{10}');
$gen   = new SimpleRandom(10007);
$result = '';

$parser = new Parser($lexer,new Scope(),new Scope());
$parser->parse()->getResult()->generate($result,$gen);

echo $result;
  

Сгенерирует:

 jmceohykoa
aclohnotga
jqegzuklcv
ixdbpbgpkl
kcyrxqqfyw
jcxsjrtrqb
kvaczmawlz
itwrowxfxh
auinmymonl
dujyzuhoag
vaygybwkfm
  

Я не пробовал это, но я думаю, что это полезно для ваших нужд.