(?=pattern) |
確定的 lookahead 零寬度斷言 查看字符串中的當前位置是否緊跟着出現了 pattern,而 pattern 不會成爲匹配字符串的一部分。'A(?=B)' 匹配後面跟有 B 的 A,但不使 B 成爲匹配的一部分。code 例如,SELECT REGEXP_SUBSTR( 'in new york city', 'new(?=\\syork)'); 會返回子串 new,由於它後面緊跟着 ' york'(請注意 york 前面的空格)。ci |
(?!pattern) |
否認的 lookahead 零寬度斷言 查看字符串中的當前位置是否沒有 緊跟着出現 pattern,而 pattern 不會成爲匹配字符串的一部分。因此,'A(?!B)' 匹配後面未跟着 B 的 A。字符串 例如,SELECT REGEXP_SUBSTR('new jersey', 'new(?!\\syork)'); 會返回子串 new。it |
(?<=pattern) |
確定的 lookbehind 零寬度斷言 查看字符串中的當前位置是否前面緊挨着出現了 pattern,而 pattern 不會成爲匹配字符串的一部分。因此,'(?<=A)B' 匹配前面緊挨着 A 的 B,但不使 A 成爲匹配的一部分。table 例如,SELECT REGEXP_SUBSTR('new york', '(?<=new\\s)york'); 會返回子串 york。兼容性 |
(?<!pattern) |
否認的 lookbehind 零寬度斷言 查看字符串中的當前位置的前面是否沒有 緊挨着出現 pattern,而 pattern 不會成爲匹配字符串的一部分。語法 例如,SELECT REGEXP_SUBSTR('about york', '(?<!new\\s)york'); 會返回子串 york。註釋 |
(?>pattern) |
所屬關係局部子表達式 僅匹配與 pattern 匹配的剩餘字符串的最大前綴。tab 例如,在 'aa' REGEXP '(?>a*)a' 中,(?>a*) 匹配(並消耗)aa,而決不單單是前導 a。所以,'aa' REGEXP '(?>a*)a' 的計算結果爲 false。兼容 |
(?:pattern) |
非捕獲塊 該語法在功能上就等效於 pattern,是爲實現兼容性而提供。 例如,在 'bb' REGEXP '(?:b*)b' 中,(?:b*) 匹配(並消耗)bb。可是,與所屬關係局部子表達式不一樣,bb 中的最後一個 b 會被放棄,以容許整個匹配成功(即,容許與在非捕獲塊的外部找到的 b 匹配)。 一樣,'a(?:bc|b)c' 匹配 abcc 和 abc。在匹配 abc 時,bc 中最後面的 c 會發生回溯,以即可以使用組外的 c 來使匹配成功。 |
(?#text) |
用於註釋。text 的內容會被忽略。 |