Php 获取与正则表达式模式sql匹配的列名

Php 获取与正则表达式模式sql匹配的列名,php,sql,regex,pdo,Php,Sql,Regex,Pdo,我想获取列名称为foo32的表中的所有列。数字32可以是任何数字。我有一个很好用的查询,除了它自然地匹配不包含数字的列之外 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table1' AND table_schema = 'database1' AND column_name LIKE 'foo%' 不幸的是,上面的查询将匹配foo12abc和fooCDE 我尝试了基于此页面的以下内容,但它返

我想获取列名称为
foo32
的表中的所有列。数字
32
可以是任何数字。我有一个很好用的查询,除了它自然地匹配不包含数字的列之外

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name =  'table1'
AND table_schema =  'database1'
AND column_name LIKE 'foo%'
不幸的是,上面的查询将匹配
foo12abc
fooCDE

我尝试了基于此页面的以下内容,但它返回了一个空结果,因此一定是遗漏了某些内容

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name =  'table1'
AND table_schema =  'database1'
AND column_name REGEXP 'foo[^0-9]'
示例表:

foo1 | foo21 | fooABC | foo123ABC | foo19 | col12
_________________________________________________
// data ...

我希望查询通过使用
foo[^0-9]
返回列
foo1
foo21
foo19

foo[^0-9]
您要查找的
foo
后面跟任何不是
0-9
的内容(字符类开头的
^
表示后面的内容的否定)

如果您尝试
foo[0-9]
,它应该会起作用(尽管它会捕获不以
foo
开头且带有附加后缀的内容)

这应该是您正在寻找的:

^foo\d+$
这意味着:

  • foo
    就在表名的开头(
    ^
  • 后跟一个或多个数字,直到表名(
    $
    )的末尾

通过使用
foo[^0-9]
您正在查找
foo
,后跟任何不是
0-9
的内容(字符类开头的
^
意味着否定后面的内容

如果您尝试
foo[0-9]
,它应该会起作用(尽管它会捕获不以
foo
开头且带有附加后缀的内容)

这应该是您正在寻找的:

^foo\d+$
这意味着:

  • foo
    就在表名的开头(
    ^
  • 后跟一个或多个数字,直到表名(
    $
    )的末尾

谢谢。
foo[0-9]
可以工作,但就像你说的那样,它也会提取在数字后面有字母的结果。
^foo\d+$
返回一个空结果?它不应该返回空结果,但尝试不使用
^
$
来查看结果是什么样的(基本上:
foo\d+
)。谢谢。
foo[0-9]
可以工作,但正如您所说,它也会提取在数字后面有字母的结果。
^foo\d+$
返回一个空结果?它不应该返回空结果,但尝试不使用
^
$
来查看结果(基本上是:
foo\d+
)。