问题描述
大家好,我是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
命令查找不同的关键字(即SUBSTRING
,SUBSTR
,LEFT
,RIGHT
) 不是这些关键字的单词将其替换为__PREFIX__
+找到的非关键字。
因此,如果输入字符串如下所示:
SUBSTRING(在过马路之前向左看向左和向右 )
该命令将找到标记为粗体的关键字并返回字符串
SUBSTRING( __ PREFIX__look 左 __ PREFIX__和右 __ PREFIX__之前 __ PREFIX__crossing __ PREFIX__the __ PREFIX__街道)
有关实时演示,请在regex101.com上查看此示例。
这就是命令执行的 。 但是OP问这是干什么的?
基于提供的代码段,无法回答此问题。看到该命令适用于某些SQL关键字,我们可以推测输入字符串将包含SQL代码,并且该命令的目的是以某种方式处理该代码。
但是除此之外,即使是关于SQL代码或其他某种语言的猜测也变得毫无根据。
获得“这是干什么用的?” 的最佳选择是询问代码的原始作者。
我可以自信地说,这不是在HANA环境中非常常用的一段代码。这是特定的自定义编码。