Регулярное выражение Oracle заменить после появления nth - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь сопоставить до появления nth и кое-как, как это работает, как https://regex101.com/r/wJ9yS6/192

Я пытался применить регулярное выражение на oracle регулярное выражение заменить

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; 

но вот что я получил полную строку, я не знаю, почему

1 Ответ

1 голос
/ 01 апреля 2020

Обратите внимание, что регулярное выражение 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

Обратите внимание, что вы использовали строку без разрывов строк в тестере регулярных выражений , и ваша строка в вопросе содержит разрывы строк. Возможно, вы захотите, чтобы . соответствовал любому символу, вам нужно передать n в качестве шестого аргумента:

REGEXP_REPLACE (mycol, '^(([^|]*\|){7}).*', '\1', 1, 0, 'n')

A cc. документы , n " позволяют символу точки (.) соответствовать символу новой строки. По умолчанию точка является подстановочным знаком. ". 1 начнет сопоставление с начальной позиции строки, а 0 включит замену всех совпадений (хотя здесь нам нужен только один, здесь вы можете использовать 1, но здесь это не имеет значения).

См. еще Oracle демо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...