无法理解 hana 正则表达式

Unable to understand hana regular expression

大家好,我是 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__' OCCURRENCE ALL),
                            '__PREFIX__', :p_alias||'.') 
                            INTO WORDS FROM SYS.DUMMY;

欢迎来到 Perl 兼容正则表达式的精彩世界。计算机语言 Perl 留给计算机编程的遗产。

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

\b(?!substring|substr|left|right)[a-z_]+\b
  • \b 匹配单词边界,单词边界被定义为单词字符和 none 单词字符之间的点(按任一顺序)。哪些字符是单词字符是由您的系统预定义的,但通常可以认为是字母数字和'_'字符
  • (?! 开始否定前瞻。这意味着在字符串的当前位置,括号中出现的内容不能出现在字符串中
  • ...|...是另一种选择。所以一个或另一个可以匹配
  • [a-z_]+ 是字符 class 匹配 a 到 z 范围内的小写字母。用+表示匹配1次或多次

把这些放在一起我们就匹配了一个词,只要这个词不是 substring 也不是 substr 也不是 left 也不是 right


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


正如我在评论中提到的,此 REPLACE_REGEXPR 命令查找不同的关键字(即 SUBSTRINGSUBSTRLEFTRIGHT),并且,对于任何 不是 的词,这些关键字将其替换为 __PREFIX__ + 找到的 non-keyword.

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

SUBSTRING ( look left and right before crossing the street )

该命令会找到 粗体 标记的关键字和 return 字符串

SUBSTRING ( __PREFIX__look left __PREFIX__and right __PREFIX__before __PREFIX__crossing __PREFIX__the __PREFIX__street )

如需现场演示,请查看 regex101.com 中的示例。

这就是命令的作用。 但是 OP 问 它的用途是什么?

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

但除此之外 - 即使它是关于 SQL 代码或某种其他语言 - 猜测也只是毫无根据的想象。

要获得 “这是做什么用的?” 的最佳答案是询问代码的原作者。

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