๋ฌธ์ž์—ด ํ•จ์ˆ˜(์ •๊ทœ์‹)ยถ

์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋Š” ์ •๊ทœ์‹(์ข…์ข… โ€œregexโ€๋ผ๊ณ ๋„ ํ•จ)๊ณผ ์ผ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•ญ๋ชฉ์˜ ๋‚ด์šฉ:

์ •๊ทœ์‹ ํ•จ์ˆ˜ ๋ชฉ๋กยถ

ํ•จ์ˆ˜

์ฐธ๊ณ 

[ NOT ] REGEXP

RLIKE์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค.

REGEXP_COUNT

REGEXP_EXTRACT_ALL

REGEXP_SUBSTR_ALL์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค.

REGEXP_INSTR

REGEXP_LIKE

RLIKE์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค.

REGEXP_REPLACE

REGEXP_SUBSTR

REGEXP_SUBSTR_ALL

[ NOT ] RLIKE

์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

์ด ์ฐธ๊ณ  ์‚ฌํ•ญ์—์„œ โ€œ๋Œ€์ƒโ€์€ ์ž‘์—…ํ•  ๋ฌธ์ž์—ด์„ ์ง€์นญํ•˜๊ณ  โ€œํŒจํ„ดโ€์€ ์ •๊ทœ์‹์„ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ€์ˆ˜ ์—ด์ด๊ณ  ํŒจํ„ด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์ˆ˜์ด์ง€๋งŒ ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ •๊ทœ์‹ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ชจ๋“  ์ธ์ž๋Š” ์ƒ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒจํ„ด์€ ์ „์ฒด POSIX ERE(ํ™•์žฅ ์ •๊ทœ์‹) ๊ตฌ๋ฌธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ (Wikipedia์—์„œ) POSIX ๊ธฐ๋ณธ ๋ฐ ํ™•์žฅ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ํŒจํ„ด์€ ๋‹ค์Œ Perl ๋ฐฑ์Šฌ๋ž˜์‹œ ์‹œํ€€์Šค๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • \d: 10์ง„์ˆ˜(0~9).

    • \D: 10์ง„์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

    • \s: ๊ณต๋ฐฑ ๋ฌธ์ž.

    • \S: ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

    • \w: โ€œ๋‹จ์–ดโ€ ๋ฌธ์ž(a~z, A~Z, ๋ฐ‘์ค„(โ€œ_โ€) ๋˜๋Š” 10์ง„์ˆ˜).

    • \W: ๋‹จ์–ด ๋ฌธ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

    • \b: ๋‹จ์–ด ๊ฒฝ๊ณ„์„ .

    • \B: ๋‹จ์–ด ๊ฒฝ๊ณ„์„ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ (Wikipedia์—์„œ) ๋ฌธ์ž ํด๋ž˜์Šค ์„น์…˜์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ (Perl ์„ค๋ช…์„œ์—์„œ) ๋ฐฑ์Šฌ๋ž˜์‹œ ์‹œํ€€์Šค ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    ์ฐธ๊ณ 

    ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์—์„œ ๋ฐฑ์Šฌ๋ž˜์‹œ ์‹œํ€€์Šค์—์„œ ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด \d ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด \\d ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ํ•ญ๋ชฉ์˜ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ์ •๊ทœ์‹ ์ง€์ •ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    ๋ฌธ์ž์—ด์„ (์ž‘์€๋”ฐ์˜ดํ‘œ๊ฐ€ ์•„๋‹ˆ๋ผ) ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ ์Œ($$) ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ, (ํŒจํ„ด ๋‚ด์˜) POSIX ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž . ๋Š” (๋Œ€์ƒ ๋‚ด์˜) ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž \n ๋ฅผ ์ผ์น˜ ํ•ญ๋ชฉ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ๋˜ํ•œ, ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž์™€ ์ผ์น˜์‹œํ‚ค๋ ค๋ฉด pattern ์ธ์ž์—์„œ . ์„ (.|\n) ์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ (์•„๋ž˜์—์„œ ์„ค๋ช…ํ•˜๋Š”) parameters ์ธ์ž์— s ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

  • ๋ชจ๋“  ์ •๊ทœ์‹ ํ•จ์ˆ˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋Š” ๊ทธ ๋ฌธ์ž์— ๋Œ€์‘ํ•˜๋Š” ์ด์ง„ ํ‘œํ˜„์˜ ๋ฐ”์ดํŠธ ๊ธธ์ด์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, POSIX ๋ฉ”ํƒ€ ๋ฌธ์ž . ์€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์™€ ์ผ์น˜ํ•จ). ๋˜ํ•œ, ๋Œ€์ƒ ์˜คํ”„์…‹์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋Š” 1๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์ •๊ทœ์‹์— ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ง€์ •ํ•˜๊ธฐยถ

์ •๊ทœ์‹ ํ•จ์ˆ˜๋Š” ๋Œ€๋ถ€๋ถ„ ์„ ํƒ์  parameters ์ธ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. parameters ์ธ์ž๋Š” ์ •๊ทœ์‹ ํ•จ์ˆ˜์˜ ์ผ์น˜ ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š” VARCHAR ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ ๋ณ€์ˆ˜

์„ค๋ช…

c

๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ผ์น˜๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

i

๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

m

์—ฌ๋Ÿฌ ์ค„ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋ฉ”ํƒ€ ๋ฌธ์ž ^ ๋ฐ $ ๋Š” ๋Œ€์ƒ ์ค„์˜ ์‹œ์ž‘๊ณผ ๋์„ ํ‘œ์‹œํ•จ). ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์ค„ ๋ชจ๋“œ๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ^ ๋ฐ $ ๋Š” ์ „์ฒด ๋Œ€์ƒ์˜ ์‹œ์ž‘๊ณผ ๋์„ ํ‘œ์‹œํ•จ).

e

ํ•˜์œ„ ์ผ์น˜ ํ•ญ๋ชฉ์„ ์ถ”์ถœํ•˜๋ฉฐ, REGEXP_INSTR, REGEXP_SUBSTR, REGEXP_SUBSTR_ALL ๋ฐ ์ด๋“ค ํ•จ์ˆ˜์˜ ๋ณ„์นญ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

s

\n ๊ณผ ์ผ์น˜ํ•˜๋„๋ก POSIX ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž . ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž ์ผ์น˜๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฌธ์ž์—ด์€ c ๋กœ, ๋‹ค์Œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ผ์น˜์ž…๋‹ˆ๋‹ค.

  • ํ•œ ์ค„ ๋ชจ๋“œ.

  • ํ•ญ์ƒ ํ•˜์œ„ ์ผ์น˜ ์ถ”์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” REGEXP_REPLACE ๋ฅผ ์ œ์™ธํ•˜๋ฉด ํ•˜์œ„ ์ผ์น˜ ์ถ”์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค.

  • POSIX ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž . ์€ \n ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ๋•Œ ๊ณต๋ฐฑ์ด๋‚˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ ์—†์ด ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ims ๋Š” POSIX ์™€์ผ๋“œ์นด๋“œ ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ค„ ๋ชจ๋“œ์—์„œ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

c ์™€ i ๊ฐ€ ๋‘˜ ๋‹ค parameters ๋ฌธ์ž์—ด์— ํฌํ•จ๋œ ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด์—์„œ ๋งˆ์ง€๋ง‰์— ๋‚˜ํƒ€๋‚˜๋Š” ์ฝ”๋“œ์— ๋”ฐ๋ผ ํ•จ์ˆ˜๊ฐ€ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ผ์น˜ ๋˜๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ci ๋Š” i ๊ฐ€ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๋ฏ€๋กœ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ผ์น˜์™€ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. REGEXP_COUNT ํ•จ์ˆ˜๋Š” ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์ผ์น˜(c ๋งค๊ฐœ ๋ณ€์ˆ˜, ๊ธฐ๋ณธ๊ฐ’)์˜ ๊ฒฝ์šฐ snow ๋ฐ SNOW ์— ๋Œ€ํ•œ ์ผ์น˜ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ผ์น˜(i ๋งค๊ฐœ ๋ณ€์ˆ˜)์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ์ผ์น˜ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELECT REGEXP_COUNT('snow', 'SNOW', 1, 'c') AS case_sensitive_matching,
       REGEXP_COUNT('snow', 'SNOW', 1, 'i') AS case_insensitive_matching;
Copy
+-------------------------+---------------------------+
| CASE_SENSITIVE_MATCHING | CASE_INSENSITIVE_MATCHING |
|-------------------------+---------------------------|
|                       0 |                         1 |
+-------------------------+---------------------------+

e ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ REGEXP_SUBSTR ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์–ด Release ๋’ค์— ๋‹จ์–ด๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ๋‚˜์˜ค๊ณ  ๊ทธ ๋’ค์— ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ๋‚˜์˜ค๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์€ ๋‹ค์Œ ์ˆซ์ž์™€ ์ผ์น˜ํ•˜๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELECT REGEXP_SUBSTR('Release 24', 'Release\\W+(\\d+)', 1, 1, 'e') AS release_number;
Copy
+----------------+
| RELEASE_NUMBER |
|----------------|
| 24             |
+----------------+

๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ๋” ๋งŽ์ด ๋ณด๋ ค๋ฉด REGEXP_INSTR, REGEXP_LIKE, REGEXP_SUBSTR, REGEXP_SUBSTR_ALL ๋ฐ [ NOT ] RLIKE ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฉ”ํƒ€ ๋ฌธ์ž์ธ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์žยถ

์ •๊ทœ์‹์—์„œ๋Š” ์ผ๋ถ€ ๋ฌธ์ž๊ฐ€ ํŠน์ •ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๋ฉ”ํƒ€ ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

์‹ค์ œ ๋ฌธ์ž(์˜ˆ: ์‹ค์ œ ๋งˆ์นจํ‘œ, ๋ณ„ํ‘œ ๋˜๋Š” ๋ฌผ์Œํ‘œ)์™€ ์ผ์น˜์‹œํ‚ค๋ ค๋ฉด ๋ฐฑ์Šฌ๋ž˜์‹œ(์˜ˆ: \., \*, \? ๋“ฑ)๋กœ ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์—์„œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ๋˜ ๋‹ค๋ฅธ ๋ฐฑ์Šฌ๋ž˜์‹œ(์˜ˆ: \\., \\*, \\? ๋“ฑ)๋กœ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ์ •๊ทœ์‹ ์ง€์ •ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด์—์„œ ์—ฌ๋Š” ๊ด„ํ˜ธ(()๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ง€์ •ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ„ด์—์„œ ๋ฌธ์ž(์˜ˆ: \()๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒจํ„ด์„ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๊ทธ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ๋˜ ๋‹ค๋ฅธ ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ์ด์Šค์ผ€์ดํ”„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํŒจํ„ด์€ ๊ด„ํ˜ธ ์•ˆ์— ๋‚˜ํƒ€๋‚˜๋Š” ์˜์ˆซ์ž ์‹œํ€€์Šค์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: (NY)).

SELECT REGEXP_SUBSTR('Customers - (NY)','\\([[:alnum:]]+\\)') AS location;
Copy
+----------+
| LOCATION |
|----------|
| (NY)     |
+----------+

์ถ”๊ฐ€์ ์ธ ์˜ˆ๋ฅผ ๋ณด๋ ค๋ฉด ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SELECT REGEXP_SUBSTR('Customers - (NY)',$$\([[:alnum:]]+\)$$) AS location;
Copy
+----------+
| LOCATION |
|----------|
| (NY)     |
+----------+

์—ญ์ฐธ์กฐ ์‚ฌ์šฉํ•˜๊ธฐยถ

Snowflake๋Š” ์ •๊ทœ์‹ ํŒจํ„ด์—์„œ ์—ญ์ฐธ์กฐ(ํ˜•์‹ ์–ธ์–ด ์ด๋ก ์—์„œ๋Š” โ€œ์Šคํ€˜์–ดโ€๋กœ ์•Œ๋ ค์ง)๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ญ์ฐธ์กฐ๋Š” REGEXP_REPLACE ํ•จ์ˆ˜์˜ ๋Œ€์ฒด ๋ฌธ์ž์—ด์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๋นˆ ํŒจํ„ด ์ง€์ •ํ•˜๊ธฐยถ

๋Œ€๋ถ€๋ถ„์˜ regexp ํ•จ์ˆ˜์—์„œ ๋นˆ ํŒจํ„ด(์ฆ‰, '')์€ ๋ฌด์—‡๊ณผ๋„ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋ฐ, ์‹ฌ์ง€์–ด ๋นˆ ๋Œ€์ƒ๊ณผ๋„ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์™ธ๋Š” REGEXP_LIKE ์™€ ๊ทธ ๋ณ„์นญ์ธ [ NOT ] REGEXP ๋ฐ [ NOT ] RLIKE ๋กœ, ์—ฌ๊ธฐ์„œ ํŒจํ„ด์€ ์–‘์ชฝ ๋์— ์•”์‹œ์ ์œผ๋กœ ๊ณ ์ •๋˜๋ฏ€๋กœ ๋นˆ ํŒจํ„ด์ด ๋นˆ ์ฃผ๋Œ€์ƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, '' ๊ฐ€ ์ž๋™์œผ๋กœ '^$' ๊ฐ€ ๋จ).

๋นˆ ๊ทธ๋ฃน(์ฆ‰, ํ•˜์œ„ ์‹ ())์€ ๋Œ€์ƒ์˜ ์‹œ์ž‘๊ณผ ๋์„ ํฌํ•จํ•˜์—ฌ, ๋ฌธ์ž ์‚ฌ์ด์˜ ๊ณต๋ฐฑ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ์ •๊ทœ์‹ ์ง€์ •ํ•˜๊ธฐยถ

๋ฌธ์ž์—ด ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์˜ ์ •๊ทœ์‹์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ทœ์‹์—์„œ ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์˜ ๋‚ด์šฉ์€ ํ•ญ์ƒ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”ํƒ€ ๋ฌธ์ž ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•  ๋•Œ๋Š” ๋‹จ์ผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SELECT w2
  FROM wildcards
  WHERE REGEXP_LIKE(w2, $$\?$$);
Copy

์—ญ์ฐธ์กฐ ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‹จ์ผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

SELECT w2, REGEXP_REPLACE(w2, '(.old)', $$very \1$$)
  FROM wildcards
  ORDER BY w2;
Copy

์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ์ •๊ทœ์‹ ์ง€์ •ํ•˜๊ธฐยถ

์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์—์„œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์Šฌ๋ž˜์‹œ ์‹œํ€€์Šค ์˜ ๋ชจ๋“  ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ๋˜ ๋‹ค๋ฅธ ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์ •๊ทœ์‹์—์„œ ๋ฐฑ์Šฌ๋ž˜์‹œ ์ด์Šค์ผ€์ดํ”„๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ:

์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆยถ

์ด ์˜ˆ์—์„œ๋Š” ๋ฌผ์Œํ‘œ(?)๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ •๊ทœ์‹์—์„œ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค์˜ ์ผ๋ถ€๋กœ์„œ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ํ•œ ์—ด์— ๋‹จ์ผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ํฌํ•จํ•˜๊ณ  ๋‹ค๋ฅธ ์—ด์—๋Š” ๋ฌผ์Œํ‘œ๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE wildcards (w VARCHAR, w2 VARCHAR);
INSERT INTO wildcards (w, w2) VALUES ('\\', '?');
Copy

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” ๋ฌผ์Œํ‘œ ๋ฆฌํ„ฐ๋Ÿด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์€ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฌผ์Œํ‘œ๋Š” ์ •๊ทœ์‹์˜ ๋ฉ”ํƒ€ ๋ฌธ์ž์ด๋ฏ€๋กœ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๋ฌผ์Œํ‘œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์Šฌ๋ž˜์‹œ๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์Šฌ๋ž˜์‹œ ์ž์ฒด๋„ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SELECT w2
  FROM wildcards
  WHERE REGEXP_LIKE(w2, '\\?');
Copy
+----+
| W2 |
|----|
| ?  |
+----+

๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๊ทœ์‹์ด ๋‘ ๊ฐœ์˜ ๋ฌธ์ž(๋ฐฑ์Šฌ๋ž˜์‹œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž ๋ฐ ๋ฌผ์Œํ‘œ)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ์„ ๋” ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT w2
  FROM wildcards
  WHERE REGEXP_LIKE(w2, '\\' || '?');
Copy
+----+
| W2 |
|----|
| ?  |
+----+

์ด์ „ ์˜ˆ์—์„œ ์ถ”๊ฐ€ ๋ฐฑ์Šฌ๋ž˜์‹œ๋Š” ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์˜ ์ผ๋ถ€ ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๊ทœ์‹ ์ž์ฒด์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ SELECT ๋ฌธ์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ SQL ๋ช…๋ น ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ์„œ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SELECT w, w2, w || w2 AS escape_sequence, w2
  FROM wildcards
  WHERE REGEXP_LIKE(w2, w || w2);
Copy
+---+----+-----------------+----+
| W | W2 | ESCAPE_SEQUENCE | W2 |
|---+----+-----------------+----|
| \ | ?  | \?              | ?  |
+---+----+-----------------+----+

์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ์ƒ์ˆ˜์—์„œ ์—ญ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆยถ

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ์—ญ์ฐธ์กฐ (์˜ˆ: \1)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์—ญ์ฐธ์กฐ์˜ ์ผ๋ถ€์ธ ์—ญ์Šฌ๋ž˜์‹œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด REGEXP_REPLACE ์˜ ๋Œ€์ฒด ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ์—ญ์ฐธ์กฐ \1 ์„ ์ง€์ •ํ•˜๋ ค๋ฉด \\1 ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ์•ž์—์„œ ๋งŒ๋“  ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. SELECT๋Š” ์—ญ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ทœ์‹ .old ์˜ ๊ฐ ๋ฐœ์ƒ์„ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋ฐ”๊ฟ” ๊ทธ ์•ž์— โ€œveryโ€๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.

INSERT INTO wildcards (w, w2) VALUES (NULL, 'When I am cold, I am bold.');
Copy
SELECT w2, REGEXP_REPLACE(w2, '(.old)', 'very \\1')
  FROM wildcards
  ORDER BY w2;
Copy
+----------------------------+------------------------------------------+
| W2                         | REGEXP_REPLACE(W2, '(.OLD)', 'VERY \\1') |
|----------------------------+------------------------------------------|
| ?                          | ?                                        |
| When I am cold, I am bold. | When I am very cold, I am very bold.     |
+----------------------------+------------------------------------------+