Sql 此生产代码中的Oracle regexp与什么匹配?

Sql 此生产代码中的Oracle regexp与什么匹配?,sql,regex,oracle,Sql,Regex,Oracle,以下是生产中的代码: dynamic_sql := q'[ with cte as select user_id, user_name from user_table where regexp_like (bizz_buzz,'^[^Z][^Y6]]' || q'[') AND user_code not in (

以下是生产中的代码:

dynamic_sql := q'[ with cte as
               select user_id,
                      user_name
               from   user_table
               where  regexp_like (bizz_buzz,'^[^Z][^Y6]]' || q'[') AND
                      user_code not in ('A','E','I')
               order by 1]';
  • 从开头开始搜索bizz_buzz
  • 匹配任何一个不是Z的字符
  • 匹配不是Y6的任意两个字符
  • 6后面的“]”是什么
  • 然后呢

  • 不成对时
    ]
    表示。。。好本身:

    ^[^Z][^Y6]]/
    
    ^ assert position at start of the string
    [^Z] match a single character not present in the list below
        Z the literal character Z (case sensitive)
    [^Y6] match a single character not present in the list below
        Y6 a single character in the list Y6 literally (case sensitive)
    ] matches the character ] literally
    
  • 从开头开始搜索bizz_buzz
  • 匹配任何一个不是Z的字符
  • 匹配不是Y或6的任意两个字符
  • 6后面的“]”是什么?这是一个
    ]

  • 不成对时
    ]
    表示。。。好本身:

    ^[^Z][^Y6]]/
    
    ^ assert position at start of the string
    [^Z] match a single character not present in the list below
        Z the literal character Z (case sensitive)
    [^Y6] match a single character not present in the list below
        Y6 a single character in the list Y6 literally (case sensitive)
    ] matches the character ] literally
    
  • 从开头开始搜索bizz_buzz
  • 匹配任何一个不是Z的字符
  • 匹配不是Y或6的任意两个字符
  • 6后面的“]”是什么?这是一个
    ]

  • 恐怕我必须在这里发布,因为评论部分不适合所需的格式。在上面显示整个语句的编辑之后,我运行了以下命令以查看字符串的最终结果:

    select q'[ with cte as
                   select user_id,
                          user_name
                   from   user_table
                   where  regexp_like (bizz_buzz,'^[^Z][^Y6]]' || q'[') AND
                          user_code not in ('A','E','I')
                   order by 1]' txt
    from dual; 
    
    结果是:

    with cte as
                   select user_id,
                          user_name
                   from   user_table
                   where  regexp_like (bizz_buzz,'^[^Z][^Y6]') AND
                          user_code not in ('A','E','I')
                   order by 1
    

    现在很明显,正则表达式末尾的结束括号和引号属于第一个备用引号字符串,而不属于正则表达式。这是连接两个交替引用的字符串,这有点令人困惑,因为它看起来确实像正则表达式的一部分。如果你正在学习评论对你身后的穷人的重要性的话!当你弄明白这一点时,请对此进行相应的评论。甚至包括到这篇文章的链接。

    恐怕我不得不在这里发表这篇文章,因为评论部分不适合要求的格式。在上面显示整个语句的编辑之后,我运行了以下命令以查看字符串的最终结果:

    select q'[ with cte as
                   select user_id,
                          user_name
                   from   user_table
                   where  regexp_like (bizz_buzz,'^[^Z][^Y6]]' || q'[') AND
                          user_code not in ('A','E','I')
                   order by 1]' txt
    from dual; 
    
    结果是:

    with cte as
                   select user_id,
                          user_name
                   from   user_table
                   where  regexp_like (bizz_buzz,'^[^Z][^Y6]') AND
                          user_code not in ('A','E','I')
                   order by 1
    

    现在很明显,正则表达式末尾的结束括号和引号属于第一个备用引号字符串,而不属于正则表达式。这是连接两个交替引用的字符串,这有点令人困惑,因为它看起来确实像正则表达式的一部分。如果你正在学习评论对你身后的穷人的重要性的话!当你弄明白这一点时,请对此进行相应的评论。甚至包括这篇文章的链接。

    我认为StackOverflow的格式造成了一些答案上的混乱。Oracle有一个字符串文本的语法,
    q'[…]'
    ,这意味着
    部分将按原样解释;例如,它可以包含单引号,而不必逐个转义

    但是这里的代码格式不理解这种语法,因此它将每个引号视为字符串分隔符,这使得结果看起来与Oracle实际看到的结果不同

    表达式将两个这样的字符串文字连接在一起。(我不知道为什么-看起来可以将其作为单个字符串文字编写,没有任何问题。)正如另一个回答/评论中指出的,生成的SQL字符串实际上是:

    with cte as
               select user_id,
                      user_name
               from   user_table
               where  regexp_like (bizz_buzz,'^[^Z][^Y6]') AND
                      user_code not in ('A','E','I')
               order by 1
    

    另一个答案指出,正则表达式的
    [^Y6]
    部分只匹配一个字符,而不是两个字符。因此,这个表达式应该只匹配第一个字符不是“Z”,第二个字符既不是“Y”也不是“6”的任何字符串。

    我认为StackOverflow的格式设置导致了答案中的一些混乱。Oracle有一个字符串文本的语法,
    q'[…]'
    ,这意味着
    部分将按原样解释;例如,它可以包含单引号,而不必逐个转义

    但是这里的代码格式不理解这种语法,因此它将每个引号视为字符串分隔符,这使得结果看起来与Oracle实际看到的结果不同

    表达式将两个这样的字符串文字连接在一起。(我不知道为什么-看起来可以将其作为单个字符串文字编写,没有任何问题。)正如另一个回答/评论中指出的,生成的SQL字符串实际上是:

    with cte as
               select user_id,
                      user_name
               from   user_table
               where  regexp_like (bizz_buzz,'^[^Z][^Y6]') AND
                      user_code not in ('A','E','I')
               order by 1
    

    另一个答案指出,正则表达式的
    [^Y6]
    部分只匹配一个字符,而不是两个字符。所以这个表达式应该简单地匹配任何第一个字符不是“Z”,第二个字符既不是“Y”也不是“6”的字符串。

    但是“|q”[”的意思是什么?(请参见问题中的
    5.
    )@Thomas,如果
    ]
    确实是正则表达式的一部分,你是对的-但它不是,正如Gary|W在下面的回答/评论所指出的。但是,“|q”[”是什么意思?(参见问题中的
    5.
    )@Thomas,如果
    ]
    确实是正则表达式的一部分,你是对的-但正如Gary|W在下面的回答/评论所指出的,它不是。缺少了一些东西。
    q'['
    构造是引用包含引号的字符串时使用的另一种引用机制,通常如下所示:
    从dual;
    中选择q'[这不是我的,是你的]'。它似乎缺少结束部分,这将出错。缺少某些内容。
    q'['
    construct被称为引用包含引号的字符串时使用的另一种引用机制,通常如下所示:
    从dual;
    中选择q'[这不是我的,是你的]'。它似乎缺少结束部分,这将出错。哇,似乎是| | q['程序员是如何继续动态查询的,不是吗?啊..我现在明白了,
    dynamic\u sql
    变量正在变成一系列由q定义的串联字符串'['..我不敢相信我之前没有看到正则表达式末尾的结束括号和引号真的属于第一个备用引号字符串的末尾,而不是正则表达式。给我投票的人应该把它拿走lolI投票了,因为我刚刚学会了如何通过dual运行我的q'['查询来查看它产生了什么。那就是v