Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Регулярное выражение и оператор regexp_replace


Автор: Feller 17.4.2015, 17:54
Добрый день!

Как составить регулярное выражение, чтоб в запросе оператор  REGEXP_REPLACE был только один.

Код

select j.ek, 
                cast(j.creation_time as date) creation_time,
                xmltype(regexp_replace(REGEXP_REPLACE(j.request_clob,'[^" .=:;?</>0-9A-Za-z]',''),'(<Text>)(.*)(</Text)','')) as t_xml
         from  t_request j


Автор: LSD 17.4.2015, 19:02
А что именно ты пытаешься описать регуляркой?

Автор: Feller 20.4.2015, 13:34
Регуляркой, я очищаю xml от ненужных символов, затем удаляю тег <Text>.

Автор: Zloxa 21.4.2015, 10:30
Цитата(Feller @  20.4.2015,  14:34 Найти цитируемый пост)
удаляю тег <Text>. 

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions042.htm
Цитата(Feller @  17.4.2015,  18:54 Найти цитируемый пост)
/

Unescaped delimiter
Цитата(Feller @  20.4.2015,  14:34 Найти цитируемый пост)
от ненужных символов

Как минимум еще амперсанд не ненужен и квардратные скобки - являются спецсимволоми разметки xml

Автор: Feller 21.4.2015, 14:11
Как в регулярку 
Код

[^" .=:;?</>0-9A-Za-z]
 добавить условие чтоб удалялся символ / , но не удалялся />.

Автор: tzirechnoy 22.4.2015, 10:47
Слушайте, ну прекратите ужэ разбирать XML регуляркой.

Сколько людей ужэ писали: не делайте так, нормальный разбор XML регулярной грамматикой невозможэн.
Я, конечно, иногда возражаю, что нормальный -- невозможэн, а достаточный -- ну почему бы и нет.

Но у Вас вот неполучилось. Зачем, зачем дальшэ мучить этот дохлый вариант?

(нет, перевести оригинальное выражэние в одно я не смог -- поскольку оракл у меня не стоит, а из документацыи непонятно, матчит ли [^ ] перевод строки или нет. Но всё равно там ужас символов на 400).

PS И да, разумеется, все попытки распарзить XML регуляркой безсмысленны без очень чёткого описания допустимого XML. Очень чёткого. XSD -- недостаточно.
PPS  добавить условие чтоб удалялся символ / , но не удалялся />.
Код

([^" .=:;?</>0-9A-Za-z][^>]|[^" .=:;?</>0-9A-Za-z]$)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)