У меня есть строка Java, которая на самом деле является сценарием SQL.
CREATE OR REPLACE PROCEDURE Proc
AS
b NUMBER:=3;
c VARCHAR2(2000);
begin
c := 'BEGIN ' || ' :1 := :1 + :2; ' || 'END;';
end Proc;
Я хочу разбить скрипт на точки с запятой, кроме тех, которые появляются внутри строки.
Желаемый результат - четыре разных строки, как указано ниже
1- CREATE OR REPLACE PROCEDURE Proc AS b NUMBER:=3
2- c VARCHAR2(2000)
3- begin c := 'BEGIN ' || ' :1 := :1 + :2; ' || 'END;';
4- end Proc
Метод Java Split () также разбивает вышеуказанную строку на токены. Я хочу сохранить эту строку такой, какая она есть, так как точки с запятой находятся внутри кавычек.
c := 'BEGIN ' || ' :1 := :1 + :2; ' || 'END;';
Вывод метода Java Split ()
1- c := 'BEGIN ' || ' :1 := :1 + :2
2- ' || 'END
3- '
Пожалуйста, предложите RegEx, который может разбить строку на точки с запятой, кроме тех, которые входят в строку.
===================== CASE-2 ==================== ====
Над разделом ответили и его работа
Вот еще один более сложный случай
============================================ ==========
У меня есть SQL-скрипт, и я хочу маркировать каждый SQL-запрос. Каждый запрос SQL отделяется точкой с запятой (;) или косой чертой (/).
1- Я хочу экранировать точку с запятой или знак /, если они появляются внутри строки, такой как
...WHERE col1 = 'some ; name/' ..
2- Выражение также должно избегать любого синтаксиса многострочного комментария, который / *
Вот ввод
/*Query 1*/
SELECT
*
FROM tab t
WHERE (t.col1 in (1, 3)
and t.col2 IN (1,5,8,9,10,11,20,21,
22,23,24,/*Reaffirmed*/
25,26,27,28,29,30,
35,/*carnival*/
75,76,77,78,79,
80,81,82, /*Damark accounts*/
84,85,87,88,90))
;
/*Query 2*/
select * from table
/
/*Query 3*/
select col form tab2
;
/*Query 4*/
select col2 from tab3 /*this is a multi line comment*/
/
Желаемый результат
[1]: /*Query 1*/
SELECT
*
FROM tab t
WHERE (t.col1 in (1, 3)
and t.col2 IN (1,5,8,9,10,11,20,21,
22,23,24,/*Reaffirmed*/
25,26,27,28,29,30,
35,/*carnival*/
75,76,77,78,79,
80,81,82, /*Damark accounts*/
84,85,87,88,90))
[2]:/*Query 2*/
select * from table
[3]: /*Query 3*/
select col form tab2
[4]:/*Query 4*/
select col2 from tab3 /*this is a multi line comment*/
Половина этого уже может быть достигнута с помощью того, что было предложено мне в предыдущем посте (ссылка на начало), но когда в запросы вводится синтаксис комментариев (/ *), и каждый запрос также может быть разделен косой чертой (/ ), выражение не работает.