В PHP я использовал функцию ereg(), чтобы определить, может ли указанная строка генерироваться с помощью входного регулярного выражения
В PHP я использовал функцию ereg(), чтобы определить, может ли указанная строка быть сгенерирована входным регулярным выражением. Я хочу отобразить все строки, которые могут быть сгенерированы с помощью данного регулярного выражения. Как я мог это сделать?
Это мой текущий код, который печатает строку, если она может быть сгенерирована с помощью регулярного выражения $reg. Я хочу сделать его более сложным, отображая все возможные строки, которые могут быть сгенерированы регулярным выражением.
<?php
$reg = $_POST['regex'];
if(isset($_POST['calc'])){
if (ereg ("$reg", "kkjjj", $st))
{
for($i = 0; $i < count($st)-1; $i++)
{
echo "$st[$i]";
}
}
else
{
echo "String not valid";
}
}
?>
2 ответа
Функция ereg устарела, начиная с PHP 5.3.0, preg_match - лучший выбор, и, если вам нужно получить все совпадения, используйте preg_match_all, эта функция использует совместимый с perl синтаксис регулярных выражений, поэтому вам нужно добавить некоторые изменения (по крайней мере, добавить косую черту, ваше выражение эквивалентно '/kkjjjj/' в Perl-совместимом регулярном выражении)
Я думаю, что единственный способ - это перебор. то есть. Создайте каждую строку и посмотрите, соответствует ли она.
Даже если вы ограничиваете пространство поиска короткими строками, это сложнее, чем кажется, поскольку регулярное выражение может охватывать все символы UTF-8, что значительно увеличивает количество перестановок по сравнению с "обычными" символами на клавиатуре.
Так что, на самом деле, Regex не совсем то, что можно изменить.