2012-02-08 5 views
-2

В 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"; 
} 

} 
?> 
+1

Что вы ожидаете от вывода, если вход является 'a +'? –

+3

Функции 'ereg' устарели. Вместо этого используйте 'preg'. – DaveRandom

+2

прекратите использование ereg(), оно устарело ... начните с использования preg_match() вместо этого .... и нет необходимости обертывать переменные в двойных кавычках («$ reg»), если в этих кавычках нет ничего другого, просто используйте переменные «как есть» .... затем попробуйте объяснить, что вы хотите сделать, с примерами входов и ожидаемых выходов. –

ответ

0

Я думаю, что единственным способом было бы переборщить его. то есть. Создайте каждую строку и посмотрите, совпадает ли она.

Даже если вы ограничиваете пространство поиска короткими строками, это сложнее, чем кажется, поскольку регулярное выражение может охватывать все символы UTF-8, что значительно увеличивает количество перестановок над «обычными» символами на клавиатуре.

Итак, не действительно, Regex на самом деле не то, что можно отменить.

+0

Создать каждую строку? – webbiedave

+0

Есть ли лучший ответ? (Я сказал, что это нежизнеспособно) –

+1

Да. Закрытие как не конструктивное;) – webbiedave

1

Функция ereg устарела с PHP 5.3.0, preg_match - лучший выбор, и если вам нужно получить все совпадения, используйте preg_match_all, эти функции используют синтаксис регулярных выражений, совместимых с perl, поэтому вам нужно добавить некоторые изменения (добавьте косые черты, по крайней мере, ваше выражение эквивалентно '/ kkjjjj /' в perl-совместимом regexp)