【问题标题】:REGEX lookbehind assertion error in Netezza SQLNetezza SQL 中的 REGEX 后视断言错误
【发布时间】:2018-11-15 17:53:56
【问题描述】:

美好的一天

我正在根据名称对商家字符串进行分类,但我正在努力处理名称可能有多个前体的商家。我尝试使用否定的lookbehind断言,但我正在努力使用以下表达式:

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

固定长度问题有什么解决办法吗?

提前谢谢你

【问题讨论】:

    标签: sql regex regex-lookarounds netezza


    【解决方案1】:

    您可以重新编写模式,以使后视交替具有相同的长度。由于(?&lt;!(a|bc|def) ) 等于(?&lt;!a )(?&lt;!bc )(?&lt;!def ),你可以使用

    \b(?<!(SHOP|XTRA|TOWN|PICK)\s)(?<!(SUPER|POWER)\s)(?<!U\s)(?<!NU\s)(?<!(BIG|TOP|MAX)\s)SAVE\s?(SUPERMARKET|HYPER)\b
    

    如果我们格式化它,你会看到

    • \b - 匹配单词边界
    • (?&lt;!(SUPER|POWER)\s) - 带有 5 个字母单词的负面回顾
    • (?&lt;!(SHOP|XTRA|TOWN|PICK)\s) - 带有 4 个字母单词的负面回顾
    • (?&lt;!(BIG|TOP|MAX)\s) - 带有 3 个字母单词的负面回顾
    • (?&lt;!NU\s) - 带有 2 个字母单词的负面回溯
    • (?&lt;!U\s) - 带有 1 个字母单词的负面回顾
    • SAVE - 文字子字符串
    • \s? - 可选空格
    • (SUPERMARKET|HYPER) - 两个值之一
    • \b - 单词边界。

    regex demo

    【讨论】:

    • 感谢 Wiktor。再次感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多