Oracle 的正则表达式中是否有诸如 look-fored、look-back 之类的东西,例如某些语言中的 ?<=
?
例如,我们只想在它之前是"ab"而不是"cd"时才要查找"ef"。
在REGEXP_REPLACE
中,我们可以通过引用第 n 个组来做到这一点,但是REGEXP_INSTR
和REGEXP_SUBSTR
呢?
示例:如果 ef 是 abef,则查找 ef 的位置,而不是当它是 cdef 时查找位置。我知道对于这个例子,我们可以寻找 abef 并偏移 2,但这是一个简单的情况。有时无法抵消。我手头没有一个好的场景,但让我们说:如果在以下字符 a 或 b 或 2 ([ab2]){2,5} 之前是 2 到 5 倍,则在 ly 上查找 ef
仅当"EF"之前是"ab"而不是"cd"时,才查找"
如果在它之前ab
那么在它之前无法cd
所以你可以做:
REGEXP_REPLACE( text, '(ab)ef', '1XX' )
或
REGEXP_SUBSTR( text, 'ab(ef)', 1, 1, NULL, 1 )
或
REGEXP_INSTR( text, 'abef', 1, 1, 1, NULL ) - LENGTH( 'ef' )
如果 ef 之前是以下字符 a 或 b 或 2 的 2 到 5 倍,则在 ly 上查找 ef
([ab2]){2,5}
REGEXP_REPLACE( ly, '([ab2]{2,5})ef', '1XX' )
或
REGEXP_SUBSTR( ly, '[ab2]{2,5}(ef)', 1, 1, NULL, 1 )
或
REGEXP_INSTR( ly, '[ab2]{2,5}ef', 1, 1, 1, NULL ) - LENGTH( 'ef' )
仅当在 [AB2]{2,5} 之前查找 [EFG]{4,6}
REGEXP_REPLACE( ly, '([ab2]{2,5})[efg]{4,6}', '1XX' )
或
REGEXP_SUBSTR( ly, '[ab2]{2,5}([efg]{4,6})', 1, 1, NULL, 1 )
或
REGEXP_INSTR( ly, '[efg]{4,6}', REGEXP_INSTR( ly, '[ab2]{2,5}[efg]{4,6}' ) )