在某些语言中,Oracle的正则表达式(例如?<=
)中是否存在诸如前瞻,后瞻的内容?
例如,我们想要寻找&#34; ef&#34;只有在它出现之前&#34; ab&#34;而不是&#34; cd&#34;。
在REGEXP_REPLACE
我们可以通过引用第n组来完成此操作,但REGEXP_INSTR
和REGEXP_SUBSTR
如何?
示例:如果是 abef ,则查找 ef 的位置,而不是 cdef 。我知道在这个例子中,我们可以查找 abef 并偏移2,但这是一个简单的例子。有时候不可能抵消。我手边没有好的场景,但是请说:如果它是以下字符a或b或2的2到5倍之前,请查找 ef ( [AB2]){2,5}
答案 0 :(得分:3)
只有在“ab”而不是“cd”
之前,才会查找“ef”
如果在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' )
如果之前是以下字符a或b或2 {2} {2}的2到5倍,请查看ef
([ab2]){2,5}
或
REGEXP_REPLACE( ly, '([ab2]{2,5})ef', '\1XX' )
或
REGEXP_SUBSTR( ly, '[ab2]{2,5}(ef)', 1, 1, NULL, 1 )
只有在[ab2] {2,5}之前寻找[efg] {4,6}
REGEXP_INSTR( ly, '[ab2]{2,5}ef', 1, 1, 1, NULL ) - LENGTH( 'ef' )
或
REGEXP_REPLACE( ly, '([ab2]{2,5})[efg]{4,6}', '\1XX' )
或
REGEXP_SUBSTR( ly, '[ab2]{2,5}([efg]{4,6})', 1, 1, NULL, 1 )