Netezza 中的 REGEX 回顾断言错误 SQL
REGEX lookbehind assertion error in Netezza SQL
美好的一天
我正在根据名称对商家字符串进行分类,但我正在努力处理名称可能包含多个前体的商家。我试图利用否定的后视断言,但我正在努力处理以下表达式:
regexp_like(trim(upper(MRCH_NME_POST_ACTION)),'\b(?<!(BIG|XTRA|TOWN|SUPER|U|TOP|SHOP|PICK|MAX|POWER|NU|) )SAVE\s?(SUPERMARKET|HYPER)\b','i')
我在 Netezza SQL 中使用的正则表达式收到以下错误代码:
ERROR [HY000] ERROR: 0 : Regex: pos(58) lookbehind assertion is not fixed length
Culprit Pattern: \b(?<!(BIG|XTRA|TOWN|SUPER|U|TOP|SHOP|PICK|MAX|POWER|NU|) )SAVE\s?(SUPERMARKET|HYPER)\b
定长问题有什么解决办法吗?
提前致谢
您可以重新编写模式,使后视变换具有相同的长度。由于 (?<!(a|bc|def) )
等于 (?<!a )(?<!bc )(?<!def )
,您可以使用
\b(?<!(SHOP|XTRA|TOWN|PICK)\s)(?<!(SUPER|POWER)\s)(?<!U\s)(?<!NU\s)(?<!(BIG|TOP|MAX)\s)SAVE\s?(SUPERMARKET|HYPER)\b
如果我们对其进行格式化,您会看到
\b
- 匹配单词边界
(?<!(SUPER|POWER)\s)
- 带有 5 个字母词的负面回顾
(?<!(SHOP|XTRA|TOWN|PICK)\s)
- 带有 4 个字母词的负面回顾
(?<!(BIG|TOP|MAX)\s)
- 带有 3 个字母词的负面回顾
(?<!NU\s)
- 带有 2 个字母词的负面回顾
(?<!U\s)
- 带有 1 个字母单词的负面回顾
SAVE
- 文字子串
\s?
- 一个可选的空格
(SUPERMARKET|HYPER)
- 两个值之一
\b
- 单词边界。
美好的一天
我正在根据名称对商家字符串进行分类,但我正在努力处理名称可能包含多个前体的商家。我试图利用否定的后视断言,但我正在努力处理以下表达式:
regexp_like(trim(upper(MRCH_NME_POST_ACTION)),'\b(?<!(BIG|XTRA|TOWN|SUPER|U|TOP|SHOP|PICK|MAX|POWER|NU|) )SAVE\s?(SUPERMARKET|HYPER)\b','i')
我在 Netezza SQL 中使用的正则表达式收到以下错误代码:
ERROR [HY000] ERROR: 0 : Regex: pos(58) lookbehind assertion is not fixed length
Culprit Pattern: \b(?<!(BIG|XTRA|TOWN|SUPER|U|TOP|SHOP|PICK|MAX|POWER|NU|) )SAVE\s?(SUPERMARKET|HYPER)\b
定长问题有什么解决办法吗?
提前致谢
您可以重新编写模式,使后视变换具有相同的长度。由于 (?<!(a|bc|def) )
等于 (?<!a )(?<!bc )(?<!def )
,您可以使用
\b(?<!(SHOP|XTRA|TOWN|PICK)\s)(?<!(SUPER|POWER)\s)(?<!U\s)(?<!NU\s)(?<!(BIG|TOP|MAX)\s)SAVE\s?(SUPERMARKET|HYPER)\b
如果我们对其进行格式化,您会看到
\b
- 匹配单词边界(?<!(SUPER|POWER)\s)
- 带有 5 个字母词的负面回顾(?<!(SHOP|XTRA|TOWN|PICK)\s)
- 带有 4 个字母词的负面回顾(?<!(BIG|TOP|MAX)\s)
- 带有 3 个字母词的负面回顾(?<!NU\s)
- 带有 2 个字母词的负面回顾(?<!U\s)
- 带有 1 个字母单词的负面回顾SAVE
- 文字子串\s?
- 一个可选的空格(SUPERMARKET|HYPER)
- 两个值之一\b
- 单词边界。