За последние 24 часа нас посетили 17727 программистов и 1618 роботов. Сейчас ищут 1660 программистов ...

регулярное выражение - вытащить названия полей

Тема в разделе "Регулярные выражения", создана пользователем JohnJ, 11 фев 2011.

  1. JohnJ

    JohnJ Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте. Мне надо вытащить из SQL запроса название полей, вывод которых запрашивается (из части запроса между SELECT и FROM). Примеры:
    COUNT(`apelsin`)
    NOW()
    MAX(`test`.`apelsin`)
    MIN(test.apelsin)
    COUNT(*)
    *
    `fruits`.`banan`
    DATETIME(DATE(TIME(`field`)))
    `banan`


    использование:
    Код (Text):
    1. $returnValue = preg_match_all('/^.+\(([A-z`._]+)\).*$|^([^()*]+)$/m', $string, $matches)
    Выражение работает, но на выходе получаем массив matches, в котором разделены найденные слова для первого случая и для второго. Какое выражение будет давать тот же результат, но лучше - чтобы найденные слова небыли разделены по разным случаям? Если я не понятно объяснил что мне нужно, то вот нагляднее:

    $matches сейчас:
    Код (Text):
    1. array (
    2.   0 =>
    3.   array (
    4.     0 => 'COUNT(`apelsin`)',
    5.     1 => 'MAX(`test`.`apelsin`)',
    6.     2 => 'MIN(test.apelsin)',
    7.     3 => '`fruits`.`banan`',
    8.     4 => 'DATETIME(DATE(TIME(`field`)))',
    9.     5 => '`banan`',
    10.   ),
    11.   1 =>
    12.   array (
    13.     0 => '`apelsin`',
    14.     1 => '`test`.`apelsin`',
    15.     2 => 'test.apelsin',
    16.     3 => '',
    17.     4 => '`field`',
    18.     5 => '',
    19.   ),
    20.   2 =>
    21.   array (
    22.     0 => '',
    23.     1 => '',
    24.     2 => '',
    25.     3 => '`fruits`.`banan`',
    26.     4 => '',
    27.     5 => '`banan`',
    28.   ),
    29. )
    $matches, который нужен:
    Код (Text):
    1. array (
    2.   0 =>
    3.   array (
    4.     0 => 'COUNT(`apelsin`)',
    5.     1 => 'MAX(`test`.`apelsin`)',
    6.     2 => 'MIN(test.apelsin)',
    7.     3 => '`fruits`.`banan`',
    8.     4 => 'DATETIME(DATE(TIME(`field`)))',
    9.     5 => '`banan`',
    10.   ),
    11.   1 =>
    12.   array (
    13.     0 => '`apelsin`',
    14.     1 => '`test`.`apelsin`',
    15.     2 => 'test.apelsin',
    16.     3 => '`fruits`.`banan`',
    17.     4 => '`field`',
    18.     5 => '`banan`',
    19.   ),
    20. )
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ^SELECT (.*) FROM

    потом explode по запятой =)
     
  3. JohnJ

    JohnJ Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    9
    Симпатии:
    0
    Так по запятой я уже разбил. Теперь мне нужно вытащить название поля из возможных вариантов. Возможные варианты, которые у меня могут встретиться, я привёл в примерах