【问题标题】:Regex into Oracle expression - (\b|\d)(?i)INT(\b|\d)正则表达式转换为 Oracle 表达式 - (\b|\d)(?i)INT(\b|\d)
【发布时间】:2020-11-13 07:53:06
【问题描述】:

我有一个这样的正则表达式:

(\b|\d)(?i)INT(\b|\d)

它可以在https://regex101.com/ 上按我的意愿工作

但是当试图让它与 Oracle 的正则表达式一起工作时......我从这个开始:

SELECT REGEXP_INSTR('INT', '(\b|\d)(?i)INT(\b|\d)') AS FOUND FROM DUAL WHERE 1=1 ;

各种变种,但都没有成功,希望能得到一些帮助

请注意,第一个参数“INT”当然是我想在其中搜索的表中的字段等

【问题讨论】:

    标签: regex oracle


    【解决方案1】:

    如果您打算只检查匹配项,您可以将\b“分解”为(^|\W|\d) / ($|\W|\d) 并使用:

    SELECT REGEXP_INSTR('INT', '(^|\W|\d)INT($|\W|\d)', 1, 1, 0, 'i')
    

    这里,(^|\W|\d)INT($|\W|\d) 匹配

    • (^|\W|\d) - 字符串开头,或非单词字符,或数字
    • INT - INT 字符串
    • ($|\W|\d) - 字符串结尾,或非单词字符,或数字。

    REGEXP_INSTR 的第六个参数是 匹配参数 参数,'i' 表示不区分大小写。因此,此函数将返回匹配项(参见第五个 return_option 参数)第一次出现(参见第四个 occurrence 参数)的第一个字符的位置,即从字符串中的第一个字符开始搜索(参见第三个 position 参数)

    使用这种单一的正则表达式方法返回INT 的确切位置是不可能的,因为\W 将在开始时使用非单词字符。

    【讨论】:

    • 这与\b 的宽度为零并不完全相同,如果匹配\W,那么您将在匹配开始之前找到字符的索引。
    • @MT0 这里的重点是检查是否有匹配。这样就足够了。
    猜你喜欢
    • 2012-09-20
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多