Обратите внимание, что регулярное выражение Oracle не поддерживает группы без захвата. Вместо этого вам нужно использовать группы захвата.
Вы можете использовать регулярное выражение ^(([^|]*\|){7}).*
(здесь вам не нужна последняя группа, (.*)
можно записать как .*
):
WITH t AS
(SELECT 'Home|-|Antennas|¿|Directional Antennas|¿|Gain Horn Antennas|¿|Standard Gain Horn Antennas With Coax Input|¿|10 GHz to 15 GHz WR75 Standard Gain Horn Antennas|¿ WR-75 Waveguide Standard Gain Horn Antenna Operating From 10 GHz to 15 GHz With a Nominal 15 dB Gain N Female Input'
mycol
FROM dual)
SELECT
REGEXP_REPLACE (mycol, '^(([^|]*\|){7}).*', '\1')
FROM t
Вывод (см. демоверсия онлайн ):
![enter image description here](https://i.stack.imgur.com/hacAx.png)
Обратите внимание, что вы использовали строку без разрывов строк в тестере регулярных выражений , и ваша строка в вопросе содержит разрывы строк. Возможно, вы захотите, чтобы .
соответствовал любому символу, вам нужно передать n
в качестве шестого аргумента:
REGEXP_REPLACE (mycol, '^(([^|]*\|){7}).*', '\1', 1, 0, 'n')
A cc. документы , n
" позволяют символу точки (.
) соответствовать символу новой строки. По умолчанию точка является подстановочным знаком. ". 1
начнет сопоставление с начальной позиции строки, а 0
включит замену всех совпадений (хотя здесь нам нужен только один, здесь вы можете использовать 1
, но здесь это не имеет значения).
См. еще Oracle демо .