Regex_replace проверить только 1 экземпляр - PullRequest
0 голосов
/ 08 марта 2019

Привет, как создать регулярное выражение, которое шаблон должен иметь только 1 экземпляр "

Например:

1. STRING" 
2. "STRING
3. STRI"NG
4. STRING""
5. "STRING"

Результат:

1. STRING""
2. ""STRING
3. STRI""NG
4. STRING"" (No change since 2 instance of ")
5. "STRING"   (No change since 2 instance of ")

1 Ответ

4 голосов
/ 08 марта 2019

Примерно так:

with t as (
  select 'STRING"' as s from dual union all
  select '"STRING' from dual union all
  select 'STRI"NG' from dual union all
  select 'STRING""' from dual union all
  select '"STRING"' from dual union all
  select 'STRING' from dual union all
  select '"STR"ING"' from dual union all
  select '"' from dual union all
  select '""' from dual union all
  select '"""' from dual
)
select
  s,
  regexp_replace(s,'^([^"]*)"([^"]*)$', '\1""\2') new_s
from t

Вывод:

+-----------+-----------+
|     S     |   NEW_S   |
+-----------+-----------+
| STRING"   | STRING""  |
| "STRING   | ""STRING  |
| STRI"NG   | STRI""NG  |
| STRING""  | STRING""  |
| "STRING"  | "STRING"  |
| STRING    | STRING    |
| "STR"ING" | "STR"ING" |
| "         | ""        |
| ""        | ""        |
| """       | """       |
+-----------+-----------+

Объяснение:

^       # asserts position at start of a line
(       # 1st capturing group
 [^"]*  # matches characters that are not the character ", zero or more times
)
"       # matches the character " literally
(       # 2nd capturing group
 [^"]*
)
$       # asserts position at the end of a line

Проверьте это онлайн с rextester .

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