使用RegExp(PREG)提取函数参数

时间:2009-02-20 16:55:45

标签: sql regex pcre

考虑以下函数参数(它们已经被提取出来了):

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 个答案:

答案 0 :(得分:1)

这看起来有点令人讨厌,但确实有效:

/(?:"(?:[^\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. [^"',]+匹配任何其他内容(逗号除外)。
  4. "(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"的部分是:

    1. [^\x5C"]+匹配除退格和引号字符
    2. 之外的任何内容
    3. \x5C(?:\x5C\x5C)*[\x5C"]匹配正确的转义序列,例如\"\\\\\"\\\\等。

答案 1 :(得分:0)

不确定您正在寻找什么,也不确定如何在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