无法理解花名正则表达式

问题描述

大家好,我是Hana的新手,我有一份将Hana sql脚本转换为雪花的工作,但是我无法理解以正则表达式给出的以下内容\b(?!substring|substr|left|right)[a-z_]+\b。我做了一些阅读,但是substr,left和right是方法,但是在这里看起来不像方法。下面是代码

SELECT REPLACE(
            REPLACE_REGEXPR(
                            '("[a-z_]+?"|\b(?!substring|substr|left|right)[a-z_]+\b)' FLAG 'imU' IN :WORDS WITH '__PREFIX__\1' OCCURRENCE ALL),'__PREFIX__',:p_alias||'.') 
                            INTO WORDS FROM SYS.DUMMY;

解决方法

欢迎来到Perl兼容正则表达式的奇妙世界。 Perl在计算机编程中的传统语言。

您可以通过阅读有关正则表达式的在线Perl文档来了解它的作用,但要简单地说:-

\b(?!substring|substr|left|right)[a-z_]+\b
  • \ b与单词边界匹配,单词边界被定义为单词字符和非单词字符之间的任意顺序的点。哪些字符是文字​​字符由系统预先定义,但通常可以认为是字母数字和'_'字符
  • (?!开始否定前瞻。这意味着在字符串的当前点上括号中的内容不能出现在字符串中
  • ... | ...是替代方法。这样一个就可以匹配
  • [a-z _] +是与a到z范围内的小写字母匹配的字符类。使用+意味着匹配1次或更多次

将所有内容放在一起,只要一个单词不是substring,substr,left或right,我们就匹配一个单词

,

JGNI的答案显然是正确的;我最初忽略了负面的前瞻。更新后的答案包含对替换规则的更正解释。


如我的评论中所述,此REPLACE_REGEXPR命令查找不同的关键字(即SUBSTRINGSUBSTRLEFTRIGHT不是这些关键字的单词将其替换为__PREFIX__ +找到的非关键字。

因此,如果输入字符串如下所示:

SUBSTRING(在过马路之前向左看向左向右 )

该命令将找到标记为粗体的关键字并返回字符串

SUBSTRING( __ PREFIX__look __ PREFIX__和 __ PREFIX__之前 __ PREFIX__crossing __ PREFIX__the __ PREFIX__街道

有关实时演示,请在regex101.com上查看此示例。

这就是命令执行的 。 但是OP问这是干什么的

基于提供的代码段,无法回答此问题。看到该命令适用于某些SQL关键字,我们可以推测输入字符串将包含SQL代码,并且该命令的目的是以某种方式处理该代码。

但是除此之外,即使是关于SQL代码或其他某种语言的猜测也变得毫无根据。

获得“这是干什么用的?” 的最佳选择是询问代码的原始作者。

我可以自信地说,这不是在HANA环境中非常常用的一段代码。这是特定的自定义编码。