接受来自用户的正则表达式并在PHP中显示来自数据库的条目

接受来自用户的正则表达式并在PHP中显示来自数据库的条目,php,regex,Php,Regex,这是用PHP编写的。我接受一个字符串,用户在其中输入正则表达式,我需要在Select查询中传递该字符串,以提取和显示与表达式匹配的文件名 例如,如果用户输入*.pdf,则应返回所有pdf文件;如果用户输入^temp,则应显示以temp开头的所有文件,依此类推 我的字符串已正确伸出,但无法形成查询。 我在$parameter中存储一个字符串,查询如下: $result=mysql_query("select filename from fileinfo where filetype REGEXP

这是用PHP编写的。我接受一个字符串,用户在其中输入正则表达式,我需要在Select查询中传递该字符串,以提取和显示与表达式匹配的文件名

例如,如果用户输入
*.pdf
,则应返回所有pdf文件;如果用户输入^temp,则应显示以temp开头的所有文件,依此类推

我的字符串已正确伸出,但无法形成查询。 我在$parameter中存储一个字符串,查询如下:

$result=mysql_query("select filename from fileinfo where filetype REGEXP '$parameter'");
请帮帮我。

试试这个

$result=mysql_query("select filename from fileinfo where filetype REGEXP '".$parameter."'); 

我发现有两个问题

  • 您使用的是glob语法(例如.*.pdf),而不是正确的regexp语法
    '.\\\.pdf'
    将是与
    '.*.pdf'
    等效的有效regexp(因为它无效,所以应该总是失败)

  • 看起来您没有正确地测试文件类型而不是文件名?请尝试以下方法:

    $result=mysql\u查询(“从fileinfo中选择filename,其中filename REGEXP'{$parameter}'”


  • 最后,尝试回显您的SQL以确保您正在运行您认为是的查询。您可能有一些转义问题。

    将regexp用引号括起来(
    '
    )。还要注意,MySQL不使用PCRE正则表达式(就像PHP使用
    preg.*
    函数一样),但我也尝试过,但没有成功。对不起,我没有得到你的POSIX和preg函数点,你能告诉我我应该在我的查询中做些什么更改吗?将查询稍微更改为使用与你的查询稍有不同的引号。您是否通过将查询分配给变量并回显它来检查查询的外观?嘿,对不起。现在完成了。我必须把它从文件类型改为文件名。我的错误。真的很抱歉。感谢您的帮助和支持。感谢Steven,但即使我们只输入^temp之类的正则表达式,它也不会显示。我可以暂时离开全局语法。添加了另一个想法。。。您是否应该测试
    文件名
    而不是
    文件类型
    ?我只测试文件名,暂时不使用*.pdf文件,因为我已经为用户提供了另一个选项,让他们只输入文件扩展名并列出文件。好的,请注意,在您的查询中,您的REGEXP是文件类型,而不是名称。我在上面的回答中更正了它。试一试,看看它是否能帮你解决问题。你已经把它倒过来了。看看你问题中的疑问。你不是在测试文件名。。。您正在测试文件类型。请帮我试一下我的答案,我想你会发现它解决了你的问题。干杯