В 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 не совсем то, что можно изменить.

Другие вопросы по тегам