๋๋ถ๋ถ ์ธ์ด์ ์ ๊ท์ ๋ฌธ๋ฒ์ ๋น์ทํ๋ค.
์ค๋ผํด
์ค๋ผํด SQL์์๋ ์ ๊ท์์ ์ฌ์ฉํ ๋ REGEXP ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
์ ๊ท์ ํจ์
1) REGEXP_LIKE
: LIKE ๊ฒ์ ๊ฐ์ด ์ ๊ท์ ์ผ์น ์ํ, boolean์ ๋ฐํ.
REGEXP_LIKE ( ๊ฒ์๋ ๋ฌธ์์ด, ์ ๊ท์ ํจํด [, ๋งค์นญ ๋งค๊ฐ๋ณ์] )
- ๋งค์นญ ๋งค๊ฐ๋ณ์
- i : ๋์๋ฌธ์ ๊ตฌ๋ถ X
- c : ๋์๋ฌธ์ ๊ตฌ๋ถ (๊ธฐ๋ณธ๊ฐ)
- n : ๋ง์นจํ ๋ฌธ์๊ฐ ์ ๋ผ์ธ๊ณผ ์ผ์นํ๋๋ก ํจ
- m : ์์ค ๋ฌธ์์ด์ ์ต์ปค ๋ฌธ์(^,$) ๋ฅผ ํ์ฑํํ๋ ์ฌ๋ฌ์ค๋ก ์ฒ๋ฆฌ
- x : ๊ณต๋ฐฑ ๋ฌธ์ ๋ฌด์
2) REGEXP_SUBSTR
: ์ง์ ๋ ์ ๊ท์ ํจํด๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด ๋ฐํ
REGEXP_SUBSTR( ๋์ ๋ฌธ์์ด, ์ ๊ท์ ํจํด [, ์์์์น [,์ผ์นํ์ [, ๋งค์นญ ํ๋ผ๋ฏธํฐ] ] ] )
- ์์์์น : ๊ฒ์ ์์ ์์น ์ง์ (๊ธฐ๋ณธ๊ฐ 1)
- ์ผ์นํ์ : n๋ฒ์งธ ์ผ์น๋ ๋ฌธ์์ด์ ๋์ฒด (๊ธฐ๋ณธ๊ฐ 0์ ๋ชจ๋ ๊ฐ์ ๋์ฒด)
- REGEXP_SUBSTR(NAME, '[^,]+' , 1, LEVEL) : NAME์์ ,๋ฅผ ์ ์ธํ ํ๋ ์ด์์ ๋ชจ๋ ๋ฌธ์ ๋ฐํ
3) REGEXP_REPLACE
: ์ ๊ท์ ํจํด์ ๊ฒ์ํ๊ณ ํด๋น ํญ๋ชฉ์ ์ง์ ๋ ๋ฌธ์์ด๋ก ๋ณํ
REGEXP_REPLACE ( ๋์ ๋ฌธ์์ด, ์ ๊ท์ ํจํด [, ๋์ฒด ๋ฌธ์์ด [,์์์์น [,์ผ์นํ์ [, ๋งค์นญ ๋งค๊ฐ๋ณ์] ] ] ] )
- ์์์์น : ๊ฒ์ ์์ ์์น ์ง์ ( ๊ธฐ๋ณธ๊ฐ 1)
- ์ผ์นํ์ : n๋ฒ์งธ ์ผ์น๋ ๋ฌธ์์ด์ ๋์ฒด (๊ธฐ๋ณธ๊ฐ 0์ ๋ชจ๋ ๊ฐ์ ๋์ฒด)
- ๋งค์นญ ๋งค๊ฐ๋ณ์ : ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฒ์๋๋ ์ต์ ์ค์ ๊ฐ๋ฅ
4) REGEXP_INSTR
: ์ ๊ท์ ํจํด ๋ฌธ์์ด ๊ฒ์ ํ ์ผ์น ํญ๋ชฉ์ด ์๋ ๋ฌธ์์ด์ ์์น ๋ฐํ
REGEXP_INSTR ( ๋์ ๋ฌธ์์ด, ์ ๊ท์ ํจํด [,์์์์น [,์ผ์นํ์ [, ๋ฐํํ ๋ฌธ์์์น [, ๋งค์นญ ๋งค๊ฐ๋ณ์] ] ] ] )
- ๋ฏธ์ผ์น ์ 0์ ๋ฐํ, ์ผ์น ํญ๋ชฉ์ด ์๋ ๋ฌธ์์ด์ ์์น(์ซ์ ๊ฐ)์ ๋ฐํ. (๋งจ ์ฒ์ ๋ฌธ์์ ์์น๋ 1)
- SREGEXP_INSTR ('The example shows how to use the REGEXP_INSTR function', 'ow', 1, 1, 0, 'i')
- 'ow'๊ฐ ์ฒ์ ๋ํ๋๋ ์์น๋ฅผ ์ซ์๋ก ๋ฐํ (๋์๋ฌธ์ ๊ตฌ๋ณ X)
Java ์ ๊ท์
- ์๋ฐ์์ ์ ๊ทํํ์ ์์ฑ ์ java.util.regex ํจํค์ง์ ํด๋์ค(Pattern, Matcher)๋ฅผ ์ฌ์ฉ.
1) Pattern ํด๋์ค ์ ๋ฉ์๋
- compile(String regex) : regex ๋ก๋ถํฐ ํจํด ์์ฑ
- matches() : ํน์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง ์ ๊ท์์ ๋งค์นญ๋๋์ง ํ์ธํ๋ ๋ฉ์๋
- matcher(CharSequence input) : ํด๋น ๋ฌธ์์ด์ด ์ ๊ท์ ํจํด๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํ
- asPredicate() : ๋ฌธ์์ด ์ผ์น์ ์ฌ์ฉํ๋ Predicate ์์ฑ
- pattern() : ์ปดํ์ผ๋ ์ ๊ทํํ์์ String ํํ๋ก ๋ณํ
- split(CharSequence input) : ๋ฌธ์์ด์ ์ฃผ์ด์ง input ์ธ์๊ฐ ํจํด์ ๋ฐ๋ผ ๋ถ๋ฆฌ
String pattern = "^[0-9]*$";
String str = "123432";
boolean result = Pattern.matches(pattern, str);
System.out.println(result);
2) Matcher ํด๋์ค
๋ฌธ์์ด์ ํจํด์ ํด์ํ๊ณ ์ฃผ์ด์ง ํจํด๊ณผ ์ผ์นํ๋์ง ์ฒดํฌํ ๋ ์ฃผ๋ก ์ฌ์ฉํจ.
- Pattern ํด๋์ค์ Matcher ํด๋์ค๋ ์์ฑ์๊ฐ ์๋ค.
- Matcher ๊ฐ์ฒด๋ Pattern ๊ฐ์ฒด์ matcher() ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ป์.
- matches() : ๋์ ๋ฌธ์์ด๊ณผ ํจํด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ true ๋ฐํ
- find() : ๋์ ๋ฌธ์์ด๊ณผ ํจํด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ true๋ฐํํ๊ณ ๊ทธ ์์น๋ก ์ด๋
- find(int start) : start ์ธ์๋ก ๋ฐ์ ์์น๋ถํฐ ๋งค์นญ ์ฒดํฌ
- start() : ๋งค์นญ๋๋ ๋ฌธ์์ด์ ์์ ์์น ๋ฐํ
- start(int group) : ์ง์ ๋ ๊ทธ๋ฃน์ด ๋งค์นญ๋๋ ์์ ์์น ๋ฐํ
- end() : ๋งค์นญ๋๋ ๋ฌธ์์ด์ ๋ ๋ฐ๋ก ๋ค์ ์์น ๋ฐํ
- group() : ๋งค์นญ๋ ๋ถ๋ถ ๋ฐํ
- group(int group) : ๋งค์นญ๋ ๋ถ๋ถ ์ค group๋ฒ์งธ ๊ทธ๋ฃจํ ๋งค์นญ๋ถ๋ถ ๋ฐํ
- groupCount() : ํจํด ๋ด ๊ทธ๋ฃนํํ ์ ์ฒด ๊ฐฏ์ ๋ฐํ
// ์ซ์
^[0-9]*$
// ํ๊ธ
^[๊ฐ-ํฃ]*$
// ํธ๋ํฐ๋ฒํธ
010-\d{4}-\d{4}$
// ์ฃผ๋ฏผ๋ฑ๋ก ๋ฒํธ
\d{6} \- [1-4]\d{6}
์๋ฐ์คํฌ๋ฆฝํธ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ๊ท์ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ํจํด์ ๊ฒ์ฌํ๊ณ , ๋งค์นญ๋๋ ๋ฌธ์์ด์ ์ถ์ถํ๊ณ ๋ณํํ๋ค.
๋ฉ์๋ | ์๋ฏธ |
("๋ฌธ์์ด").match(/์ ๊ทํํ์/flag) | "๋ฌธ์์ด"์์ ์ ๊ทํํ์์ ๋งค์นญ๋๋ ํญ๋ชฉ๋ค์ ๋ฐฐ์ด๋ก ๋ฐํ |
("๋ฌธ์์ด").replace(/์ ๊ทํํ์/,"๋์ฒด๋ฌธ์์ด") | ์ ๊ทํํ์์ ๋งค์นญ๋๋ ํญ๋ชฉ์ "๋์ฒด๋ฌธ์์ด"๋ก ๋ฐํ |
("๋ฌธ์์ด").split(์ ๊ทํํ์) | "๋ฌธ์์ด"์ ์ ๊ทํํ์์ ๋งค์นญ๋๋ ํญ๋ชฉ์ผ๋ก ์ชผ๊ฐ์ด ๋ฐฐ์ด๋ก ๋ฐํ |
(์ ๊ทํํ์).test("๋ฌธ์์ด") | "๋ฌธ์์ด"์ด ์ ๊ทํํ์์ด ๋งค์นญ๋๋ฉด true, ์๋๋ฉด false ๋ฐํ |
(์ ๊ทํํ์).exec("๋ฌธ์์ด") | match๋ฉ์๋์ ์ ์ฌ(๋จ, ๋ฌด์กฐ๊ฑด ์ฒซ๋ฒ์งธ ๋งค์นญ ๊ฒฐ๊ณผ๋ง ๋ฐํ) |
// ์ ๊ทํํ์์ ๋ด์ ๋ณ์
cosnt regex = /apple/;
// "๋ฌธ์์ด"์ด "์ ๊ทํํ์"๊ณผ ๋งค์นญ๋๋ฉด true, ์๋๋ฉด false ๋ฐํ
regex.test("Hello banana and apple hahahaha");
// "๋ฌธ์์ด"์์ "์ ๊ทํํ์"์ ๋งค์นญ๋๋ ํญ๋ชฉ๋ค์ ๋ฐฐ์ด๋ก ๋ฐํ
const txt = "Hello banana and apple hahahaha");
txt.match(regex); //['apple']
// "์ ๊ทํํ์"์ ๋งค์นญ๋๋ ํญ๋ชฉ์ "๋์ฒด๋ฌธ์์ด"๋ก ๋ฐํ
txt.replace(regex, "orange"); // "Hello banana and orange hahahaha"
ํ์ด์ฌ
ํ์ด์ฌ์ด์๋ re ๋ชจ๋์ import ํด์ ์ ๊ท์์ ์ฌ์ฉํ๋ค.
import re
// re.compile์ ํตํด ์ ๊ทํํ์์ ์ปดํ์ผํ์ฌ ๋ณ์์ ์ ์ฅํ์ฌ ์ฌ์ฉ
p = re.compile('์ ๊ทํํ์')
// ๋ฉ์๋
p = re.compile('[a-z]+')
// ๋ฉ์๋ match : ๋ฌธ์์ด์ ์ฒ์ ์์๋ถํฐ ๊ฒ์ํ์ฌ ์ผ์นํ๋ ํจํด ์ฐพ๊ธฐ
p.match('aaa')
// ๋ฉ์๋ search : ์ ์ฒด ๋ฌธ์์ด์์ ์ฒ์์ผ๋ก ๋งค์น๋๋ ๋ฌธ์์ด ์ฐพ๊ธฐ
p.search('aaa')
// ๋ฉ์๋ findall : ๋ชจ๋ ๋งค์น๋ฅผ ์ฐพ์ ๋ฆฌ์คํธ๋ก ๋ฐํ
p.findall('aaa')
// ๋ฉ์๋ finditer : ๋ชจ๋ ๋งค์น๋ฅผ ์ฐพ์ ๋ฐ๋ณต๊ฐ๋ฅ ๊ฐ์ฒด๋ก ๋ฐํ
p.finditer('a1bb1ccc')
// ๋ฐ๋ณต๊ฐ๋ฅ ๊ฐ์ฒด 1) 'a' 2) 'bb' 3) 'ccc'
๋งค์น ๊ฐ์ฒด๋ ๋ด๋ถ ์ ๋ณด์ ์ ๊ทผ๊ฐ๋ฅํ ๋ค ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ๊ณต
p = re.compile('[a-z]+')
result = p.search('1aaa11aaa1')
result.group()
// aaa
result.start()
// 1
result.end()
// 4
result.span()
// (1, 4)
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก์ ํธ | ์ค๊ณ ๋จ๊ณ์์ ํ์ฅ์ฑ์ ๋ํ ๊ณ ๋ฏผ (0) | 2025.02.12 |
---|---|
MSA | ์ํท ๋ธ๋ ์ด์ปค (feat. Resilience4j) (3) | 2025.02.11 |
TIL : ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ ์ธ๋ฑ์ค ์๋ฌ, ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ (0) | 2023.04.29 |
chrome debugging mode (0) | 2022.11.27 |
์ ๊ท์ (0) | 2022.11.11 |