#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
Я не пробовал это, но я думаю, что это полезно для ваших нужд.