-2

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

}
?>
4

2 回答 2

1

ereg 函数自 PHP 5.3.0 起已弃用,preg_match 是更好的选择,如果需要获取所有匹配项,请使用 preg_match_all,此函数使用 perl 兼容的正则表达式语法,因此您需要添加一些更改(至少添加斜杠, 你的表达式相当于 perl 兼容的正则表达式中的 '/kkjjjj/')

于 2012-02-08T17:32:45.557 回答
0

我认为唯一的方法是暴力破解。IE。生成每个字符串并查看它是否匹配。

即使您将搜索空间限制为短字符串,这也比听起来更困难,因为正则表达式可以包含所有 UTF-8 字符,这比键盘上的“常规”字符显着增加了排列的数量。

所以,不是真的,Regex 并不是真正可以逆转的东西。

于 2012-02-08T17:28:42.360 回答