【问题标题】:How to make this regex pattern work in phpMyAdmin如何使这个正则表达式模式在 phpMyAdmin 中工作
【发布时间】:2016-12-06 15:07:45
【问题描述】:

我有以下正则表达式:

[^A-Z0-9\.\s\%\$\/\-\+]

我在 PHP 中像下面这样使用它:

preg_match("/[^A-Z0-9\.\s\%\$\/\-\+]/", $input_line, $output_array);

但是当我尝试在 phpMyAdmin 中使用相同的正则表达式时,我得到了错误,或者它没有按预期工作。

我应该如何改变它以使其在 MySQL 语法中工作?

【问题讨论】:

  • 您应该能够在查询中使用正则表达式。 phpMyAdmin 只是您数据库的一个接口,您不应该在那里编写 PHP 代码。
  • 好吧,看看你正在尝试什么以及错误是什么会有所帮助。
  • MySQL 不支持 PCRE,因此您不能使用完全相同的正则表达式。在此处阅读更多信息:dev.mysql.com/doc/refman/5.7/en/regexp.html 和此处:regextester.com/eregsyntax.html
  • @Dekel 确切地说,我只需要一个正则表达式,一个 1-1 表示,在 php 代码中起作用,它应该如何改变,以便在 MySQL 中工作
  • 添加您尝试运行的确切查询(并注意它与 phpmyadmin 完全无关 - 问题与 mysql 有关)

标签: php mysql regex phpmyadmin


【解决方案1】:

试试这个用户发布的内容:

SELECT * FROM person WHERE name not REGEXP '[0-9]'

从这里Regular expressions in Mysql/phpmyadmin

phpmyadmin 将使用数据库语法而不是 php 代码,示例:

PHP 语法(如何在 PHP 中使用正则表达式)

$regex = "/[^A-Z0-9\.\s\%\$\/\-\+]/"; preg_match($regex, $input_line, $output_array);

SQL 语法(用于查询像 MySQL 这样的 SQL 数据库)

SELECT * FROM person WHERE name not REGEXP '[0-9]'

【讨论】:

  • 请解释“数据库语法不是 php”是什么意思。这句话真的没有任何意义。
【解决方案2】:

\s(和其他几个\ 的东西)不是由 MySQL 的正则表达式实现的。取而代之的是[:SPACE:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多