首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snowflake: Regex with "?“

Snowflake: Regex with "?“
EN

Stack Overflow用户
提问于 2018-08-16 04:37:06
回答 2查看 5.3K关注 0票数 3

我使用Snowflake作为数据库,并尝试基于正则表达式子字符串匹配字符串。

具体地说,我正在做:

REGEXP_SUBSTR('(hey)', '(?)')

我希望从这里得到True,但是我得到了:

代码语言:javascript
复制
Invalid regular expression: '(?)', no argument for repetition operator: ?

我浏览了文档,但没有看到任何关于?在Snowflake正则表达式中的不同使用情况。

你知道为什么它忽略了左括号吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-08-16 10:28:39

正则表达式有一个通用的分组结构。

它们封装子表达式,等同于作用域。

在一般形式中,它由一对左括号和闭括号( )组成,

它们只是称为元字符的代码列表中的2个正则表达式控制代码。

一开始,这是对构造进行分组的唯一方法,而且它还

作为一种捕获机制。

随之而来的是将分组扩展到其他用途的需求。

所以他们开始在开始的括号(<here>后面添加更多的字符

以获得不同的含义。

它已经演变成以下这些分组结构的含义:

(这只是一个示例)

(?: )群集组,不捕获。

(?! )断言,负面展望未来。

(?<! )断言,负面的背后看。

(?= )断言,积极向前看。

(?<= )断言,积极向后看。

(?M)内联修饰符(其中M= s,m,i)。

(?'abc' )命名的捕获组。

(?<abc> )命名捕获组(备用)。

(?P<abc> )命名捕获组(alternative - Python)。

(*abc)回溯控制谓词。

(?(abc) |) Conditional,其中abc可以是许多不同的东西。

(?(DEFINE) )特殊条件定义,其中始终为真

而且它的内容永远不会在主线代码中执行。

这是放置函数定义的地方。

(?# )内联代码注释。

(?> )原子组。

组号的(?1)函数调用。

对命名组的(?&abc)函数调用。

(?{ })代码构造(Perl)。

您还可以注意到,问号?跟在括号后面

而是回溯控制动词。

本例中的问号不是元字符,而是序列的开始标记

标识分组构造是什么的字符。

如果没有前同步码的结束序列(在问号之后),引擎

解析器没有分组构造的真实身份,

因此,它会退回到最后一个有效的分组结构,即通用捕获组

( ).

它开始解析该组的内容。

在您的例子中,第一个结构是一个?

这是一个修饰对象(它之前的内容)的量词元字符。

由于编译器将分组构造视为已确定的事务,

它抛出了一个错误,这个量词,没有量化任何东西。

代码语言:javascript
复制
     (                             # (1 start)
=         ?  <-- Quantifies nothing
     )                             # (1 end)
票数 1
EN

Stack Overflow用户

发布于 2018-11-12 12:33:16

根据文档,REGEXP_SUBSTR用于获取匹配的子字符串,因此您永远不会得到TRUE,但您可能会得到一个非NULL的答案。

代码语言:javascript
复制
SELECT REGEXP_SUBSTR('(hey)', '\\(\\w+\\)');

给出(hey)作为答案

代码语言:javascript
复制
SELECT REGEXP_SUBSTR('(hey)', '\\(\\w+\\)') IS NOT NULL;

因此为您提供了TRUE,但它更易于使用

代码语言:javascript
复制
SELECT REGEXP_LIKE('(hey)', '\\(\\w+\\)');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51866057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档