2014-01-14 4 views
2

мне нужно заменить Somthing так:Как избежать символов типа '[', ']', '|' в REGEXP_SUBSTR оракула

some random characters[[some_randome_characters1|some_randome_characters2]]some random characters 

к этому:

[link=some_randome_characters]some_randome_characters[/link] 

я смог написать процедуру имея это:

l_tmp:=regexp_substr(content,'/[{2}(/s|/w|/d)+/|/[{2}(/s|/w|/d)+/]{2}'); 

... здесь я Я делаю отдых, чтобы построить свою ссылку. Проблема в том, что (/s|/w|/d)+ не найти все совпадения -> для текста exapmle с '.', Или '=' и другими. В целом я хочу изменить это:

(/s|/w|/d)+ 

к этому:

[^/|/[/]] 

Но это не будет работать. Есть ли способ избежать этих трех символов?

ответ

0

SQL Fiddle

Oracle 11g R2 Настройка схемы:

CREATE OR REPLACE FUNCTION extractFirstLink(
    str IN VARCHAR2 
) RETURN VARCHAR2 DETERMINISTIC 
IS 
    m1 VARCHAR2(4000) := REGEXP_SUBSTR(str, '\[\[(.*?)(\|(.*?))?\]\]', 1, 1, NULL, 1); 
    m2 VARCHAR2(4000) := REGEXP_SUBSTR(str, '\[\[(.*?)(\|(.*?))?\]\]', 1, 1, NULL, 3); 
BEGIN 
    RETURN '[link=' || m1 || ']' || NVL(m2, m1) || '[/link]'; 
END extractFirstLink; 
/

Запрос 1:

WITH data AS (
SELECT 'some random characters[[some_randome_characters1|some_randome_characters2]]some random characters' AS text 
FROM DUAL 
) 
SELECT extractFirstLink(text) 
FROM data 

Results:

|           EXTRACTFIRSTLINK(TEXT) | 
|----------------------------------------------------------------| 
| [link=some_randome_characters1]some_randome_characters2[/link] | 
1

Вы выписываете shlash /, но вместо этого вам нужно использовать обратную косую черту \ для экранирования.

Смежные вопросы