首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串匹配

字符串匹配
EN

Stack Overflow用户
提问于 2011-06-19 17:37:47
回答 2查看 172关注 0票数 2

我想从SQL 'CREATE‘查询中获得列名。

查询:

代码语言:javascript
复制
CREATE TABLE 'test' (
'col1' INT( 10 ) NOT NULL ,
'col2' VARCHAR( 50 ) NOT NULL ,
'col3' DATE NOT NULL
) ENGINE = MYISAM ;

代码:

代码语言:javascript
复制
preg_match_all("/'(.+)' (\w+)\(? ?(\d*) ?\)?/", $sql, $_matches, PREG_SET_ORDER);

输出:

代码语言:javascript
复制
Array ( 
[0] => Array ( [0] => 'col1\' INT( 10 ) [1] => col1\ [2] => INT [3] => 10 ) 
[1] => Array ( [0] => 'col2\' VARCHAR( 50 ) [1] => col2\ [2] => VARCHAR [3] => 50 ) 
[2] => Array ( [0] => 'col3\' DATE [1] => col3\ [2] => DATE [3] => ) 
) 

但我需要这样简单的结果:

代码语言:javascript
复制
array(
  array('INT( 10 )', 'col1'),
  array('VARCHAR( 50 )', 'col2'),
  array('DATE', 'col3')
);

我们将感谢所有可能的解决方案。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-19 18:13:03

代码语言:javascript
复制
$sql = <<<SQL
       CREATE TABLE 'test' (
       'col1' INT( 10 ) NOT NULL ,
       'col2' VARCHAR( 50 ) NOT NULL ,
       'col3' DATE NOT NULL
       ) ENGINE = MYISAM ;
SQL;

preg_match_all("/'(.+)' (\w+(?:\( ?\d* ?\))?)/", $sql, $matches, PREG_SET_ORDER);

$matches = array_map(function($array) {
  return array($array[2], $array[1]);
}, $matches);

var_dump($matches);

输出

代码语言:javascript
复制
array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(9) "INT( 10 )"
    [1]=>
    string(4) "col1"
  }
  [1]=>
  array(2) {
    [0]=>
    string(13) "VARCHAR( 50 )"
    [1]=>
    string(4) "col2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(4) "DATE"
    [1]=>
    string(4) "col3"
  }
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-19 18:26:34

重新使用上一个答案中的现有查询:

代码语言:javascript
复制
preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);

$matches = array_map(function($v) {return array(trim($v[2]), $v[1]);}, $_matches);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6404023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档