简体   繁体   中英

Regex - Invalid regular expression: '(?:[v=)', no argument for repetition operator:?

I have this query that I'm using in Snowflake:

Select *,
case  WHEN REGEXP_SUBSTR(NAME, '(?:\[v=)') is not null THEN REGEXP_SUBSTR(NAME, '[[]v=([0-9]+)')
else null
end
from my_table;

but when I try to run it, it tells me:

Invalid regular expression: '(?:[v=)', no argument for repetition operator: ?

but I've tested this out on regex101 here and it looks like its working, I want to check for [v=

Edit: More insight into what I'm trying to find w. the regex, I have rows that look like this test [v=123] , words [v=444] , more [v=532] and I need to be able to look through each column and find if it has [v= and extract the numbers only

You can use

SELECT *, REGEXP_SUBSTR(Name, '[[]v=([0-9]+)', 1, 1, 'e') from my_table;

Here,

  • [[]v=([0-9]+) matches [v= and then captures one or more digits into Group 1
  • 1, 1, 'e' means that we start matching from the first char, one occurrence, and the e makes the engine fetch the Group 1 value (it is default, if you needed Group 2 (if you had it in the pattern) value, you woul add another param, and use REGEXP_SUBSTR(Name, '[[](v|V)=([0-9]+)', 1, 1, 'e', 2) ).

This should do it:

SELECT REGEXP_SUBSTR(Name, 'v=([0-9]+)', 1, 1, 'e') val from values ('foo'), ('test [v=111] ') , (' anothertest [v=222]') t(Name) ;

VAL
null
111
222

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM