考虑以下函数参数(它们已经被提取出来了):
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
答案 0 :(得分:1)
这看起来有点令人讨厌,但确实有效:
/(?:"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"|'(?:[^\x5C']+|\x5C(?:\x5C\x5C)*[\x5C'])*'|[^"',]+)+/g
我使用了\x5C
而不是普通的反斜杠字符\
,因为其中太多可能会造成混淆。
这个正则表达式由以下部分组成:
"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"
匹配双引号字符串声明'(?:[^\x5C']+|\x5C(?:\x5C\x5C)*[\x5C'])*'
匹配单引号字符串声明[^"',]+
匹配任何其他内容(逗号除外)。 "(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"
的部分是:
[^\x5C"]+
匹配除退格和引号字符\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