将SQL列的名称分开,并使用Regex [PHP]从其别名中分解



使用Regex我想将列名(如果有(与它们的别名分开。正如我在下面提到的,我创建了一个表达式,但没有引号就无法正常工作。

谢谢!

(?<nameFull>               #nameRegex
 (?<name>[^"'`]+)          #name
 (?<nameQoute>["'`]+)?      #name Qoute
)
(?<aliasFull>               #aliasRegex
 s+                        #before Alias WhiteSpace
 (?<AS>ASs+)?              #AS Is match or Not match
 (?<aliasQoute>["'`])?      #alias Qoute
 (?<alias>[^"'`]+)          #alias
)?

您还可以看到我使用此链接进行的测试。

这是符合您的需求的正则是:

^W?(?<table>[w-]+.)?(?<name>[w-]+)W?(W+asW+)?(?<alias>[w-]+)?W?$

在线测试此正则表达式

php代码

$re = "/^W?(?<table>[w-]+.)?(?<name>[w-]+)W?(W+asW+)?(?<alias>[w-]+)?W?$/i";
$array = [
    "columnam-e as myalias",
    "table.columnam-e as myalias",
    '"column" AS "mycolumn"',
    "'column' AS 'mycolumn'",
    "'table.column' AS 'mycolumn'",
    "`column` AS `mycolumn`",
    "columnam-e mycolumn",
    "colunmanesingle"
];
foreach ($array as $i => $value) {
    preg_match($re, $value, $matches);
    $name = $matches['name'];
    $table = NULL;
    $alias = NULL;
    if(array_key_exists('table', $matches)) {
      $table =  $matches['table'];
    }
    if(array_key_exists('alias', $matches)) {
      $alias =  $matches['alias'];
    }
    printf("%sr=> table: %s, name: %s, alias: %srr", $value, $table, $name, $alias);
}

在线测试此php片段

最新更新