1

考虑以下函数参数(它们已经从函数中提取):

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

有没有办法使用正则表达式提取参数以获取以下数组输出并去除空格:

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

我坚持使用这个不够宽松的 RegExp:

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

2 回答 2

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. [^"',]+匹配任何其他内容(逗号除外)。

的部分"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"是:

  1. [^\x5C"]+匹配除退格和引号字符之外的任何内容
  2. \x5C(?:\x5C\x5C)*[\x5C"]匹配正确的转义序列,如\", \\, \\\",\\\\等。
于 2009-02-20T17:22:10.987 回答
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
于 2009-02-20T17:14:07.933 回答