Извлечение аргументов функций с помощью RegExp (PREG) - PullRequest
1 голос
/ 20 февраля 2009

Рассмотрим следующие аргументы функции (они уже извлечены из функции):

Monkey,"Blue Monkey", "Red, blue and \"Green'",  'Red, blue and "Green\''

Есть ли способ извлечь аргументы, чтобы получить следующий вывод массива, используя regexp и убирая пробелы:

[Monkey, "Blue Monkey", "Red, blue and \"Green'", 'Red, blue and "Green\'']

Я застрял, используя этот RegExp, который недостаточно разрешителен:

/(("[^"]+"|[^\s,]+))/g

Ответы [ 2 ]

1 голос
/ 20 февраля 2009

Это выглядит немного противно, но работает:

/(?:"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"|'(?:[^\x5C']+|\x5C(?:\x5C\x5C)*[\x5C'])*'|[^"',]+)+/g

Я использовал \x5C вместо простого символа обратной косой черты \, так как слишком многие из них могут сбить с толку.

Это регулярное выражение состоит из частей:

  1. "(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*" соответствует объявлениям строк в двойных кавычках
  2. '(?:[^\x5C']+|\x5C(?:\x5C\x5C)*[\x5C'])*' соответствует объявлениям строк в одинарных кавычках
  3. [^"',]+ соответствует чему-либо еще (кроме запятых).

Части "(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*":

  1. [^\x5C"]+ соответствует всему, кроме символа возврата и кавычки
  2. \x5C(?:\x5C\x5C)*[\x5C"] соответствует правильным escape-последовательностям, таким как \", \\, \\\", \\\\ и т. Д.
0 голосов
/ 20 февраля 2009

Не знаю точно, что вы ищете, и еще не знаете, как это сделать в SQL, но этого недостаточно:

(на примере Python)

import re
x = '''Monkey, "Blue Monkey", "Red, blue and "Green\\"", 'Red, blue and "Green\\'\''''
l = re.split(',\s*',x)
print x
for a in l:
    print a
...