Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符串匹配_Php_Regex_Preg Match - Fatal编程技术网

Php 字符串匹配

Php 字符串匹配,php,regex,preg-match,Php,Regex,Preg Match,我想从SQL“创建”查询中获取列名 查询: CREATE TABLE 'test' ( 'col1' INT( 10 ) NOT NULL , 'col2' VARCHAR( 50 ) NOT NULL , 'col3' DATE NOT NULL ) ENGINE = MYISAM ; Array ( [0] => Array ( [0] => 'col1\' INT( 10 ) [1] => col1\ [2] => INT [3] => 10 ) [1]

我想从SQL“创建”查询中获取列名

查询:

CREATE TABLE 'test' (
'col1' INT( 10 ) NOT NULL ,
'col2' VARCHAR( 50 ) NOT NULL ,
'col3' DATE NOT NULL
) ENGINE = MYISAM ;
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] => ) 
) 
代码:

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

CREATE TABLE 'test' (
'col1' INT( 10 ) NOT NULL ,
'col2' VARCHAR( 50 ) NOT NULL ,
'col3' DATE NOT NULL
) ENGINE = MYISAM ;
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] => ) 
) 
但我需要这样简单的结果:

array(
  array('INT( 10 )', 'col1'),
  array('VARCHAR( 50 )', 'col2'),
  array('DATE', 'col3')
);

我们将感谢所有可能的解决方案。感谢您重新使用上一个答案中的现有查询:

$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);
preg_match_all("/'(.+)' ((\w+)\(? ?(\d*) ?\)?)/", $sql, $_matches, PREG_SET_ORDER);

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

相关答案:看起来像是
addslashes()
magic\u quotes
(在
preg\u match\u all
之前)有问题@hakre:我问了这个问题。我需要一个更好的解决方案。阅读这个问题..我的php非常生锈,但是你不能做一个简单的查询,然后使用
mysql\u fetch\u assoc()
函数并使用
foreach
循环它并获取列名吗?