douyimiao1993 2017-04-19 11:53
浏览 57
已采纳

使用Regex [PHP]拆分SQL列名及其别名中的任何一个

Using Regex I want to separate the column names (if any) from their aliases. As I mentioned below, I created an expression but it does not work without quotes.

Thank you !

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

You can also see the test I made with this link.

  • 写回答

1条回答 默认 最新

  • dtqpw68806 2017-04-19 13:45
    关注

    Here is a regex matching your needs :

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

    Test this regular expression online

    PHP snippet

    $re = "/^\W?(?<table>[\w-]+\.)?(?<name>[\w-]+)\W?(\W+as\W+)?(?<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("%s=> table: %s, name: %s, alias: %s", $value, $table, $name, $alias);
    }
    

    Test this PHP snippet online

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 速帮,学校需要在外上班没空
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义