Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用RegExp(PREG)提取函数参数_Sql_Regex_Pcre - Fatal编程技术网

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

Sql 使用RegExp(PREG)提取函数参数,sql,regex,pcre,Sql,Regex,Pcre,考虑以下函数参数(它们已从函数中提取): 是否有一种方法可以提取参数,以使用regexp和剥离空格获得以下数组输出: [Monkey, "Blue Monkey", "Red, blue and \"Green'", 'Red, blue and "Green\''] 我无法使用此RegExp,它的权限不够: /(("[^"]+"|[^\s,]+))/g 不确定您到底在寻找什么,也不知道如何在SQL中实现这一点,但这样做还不够: (以python为例) 不确定您到底在寻找什么,也不知道如何在

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

是否有一种方法可以提取参数,以使用regexp和剥离空格获得以下数组输出:

[Monkey, "Blue Monkey", "Red, blue and \"Green'", 'Red, blue and "Green\'']
我无法使用此RegExp,它的权限不够:

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

不确定您到底在寻找什么,也不知道如何在SQL中实现这一点,但这样做还不够:

(以python为例)


不确定您到底在寻找什么,也不知道如何在SQL中实现这一点,但这样做还不够:

(以python为例)


这看起来有点恶心,但它起作用了:

/(?:"(?:[^\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”]
    匹配正确的转义序列,如
    \“
    \\\
    \\\\”

  • 这看起来有点恶心,但它起作用了:

    /(?:"(?:[^\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”]
    匹配正确的转义序列,如
    \“
    \\\
    \\\\”

  • 此regexp不适用于未用空格分隔的项。很抱歉,忘了提及它。只需将“,\s+”更改为“,\s*”以使间距选项此regexp对未用空格分隔的项目无效。很抱歉,忘了提及。只需将“,\s+”更改为“,\s*”即可选择间距
    /(?:"(?:[^\x5C"]+|\x5C(?:\x5C\x5C)*[\x5C"])*"|'(?:[^\x5C']+|\x5C(?:\x5C\x5C)*[\x5C'])*'|[^"',]+)+/g