Published on

🍎 Swift - Regex.01

Authors
  • avatar
    Name
    이창쀀
    Twitter

μ •κ·œν‘œν˜„μ‹ μ°Έ μ• μ¦μ˜ κ°œλ…μΈ 것 κ°™μŠ΅λ‹ˆλ‹€. μ €λŠ” 잘 λͺ°λΌμ„œ λͺ»μ“°λŠ”데, 잘 μ“°λŠ” μ‚¬λžŒλ“€μ€ 20쀄~30쀄이 ν•„μš”ν•œ μ½”λ“œλ₯Ό 단 ν•œ μ€„λ‘œ μ²˜λ¦¬ν•΄λ²„λ¦¬κ±°λ“ μš”.

κ·Έλž˜μ„œ 미루고 미루닀 λ“œλ””μ–΄ 저도 이게 λ­”μ§€λ‚˜ ν•œ 번 λ³΄μžλŠ” μ‹μœΌλ‘œ κ³΅λΆ€ν•΄λ³΄κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.

μ •κ·œν‘œν˜„μ‹ (Regular Expression)

ν”νžˆ "Regex" 라고 λ§Žμ΄λ“€ μ€„μ—¬μ„œ λΆ€λ₯΄λŠ”λ°μš”..

Regular Expression의 μ€„μž„λ§μž…λ‹ˆλ‹€.

μ •κ·œν‘œν˜„μ‹μ΄λž€ μ–΄λ–€ 문자λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ κ·œμΉ™λ“€μ„ μ •ν•΄λ‘” λ¬Έλ²•μž…λ‹ˆλ‹€. ex) λ¬Έμžμ—΄μ— μˆ«μžκ°€ μžˆλŠ”μ§€, λ¬Έμžμ—΄μ— "s"둜 μ‹œμž‘ν•˜λŠ” 단어가 μžˆλŠ”μ§€

λ¬Έμžμ—΄μ— μ–΄λ–€ νŒ¨ν„΄μ„ 묻고, κ·Έ νŒ¨ν„΄μ„ μΆ©μ‘±ν•˜λŠ”μ§€?에 λŒ€ν•œ 닡변을 얻을 수 μžˆλŠ” 것이죠.

주어진 λ¬Έμžμ—΄ μ°ΎκΈ°

κ°€μž₯ μ‰¬μš΄ μ˜ˆμ œλΆ€ν„° μ‹œμž‘ν•΄λ΄…μ‹œλ‹€.

μ•„λ¬΄λŸ° 기호 없이 μ‚¬μš©ν–ˆμ„ 경우, μ •ν™•νžˆ 주어진 λ¬Έμžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 지λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Source:

Hello, world!

λŒ€μ†Œλ¬Έμž ꡬ뢄

Hello

matches: Hello, world!

hello

matches: Hello, world!

μ •κ·œμ‹μ€ λŒ€μ†Œλ¬Έμž ꡬ뢄을 ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ "hello"와 "Hello"λŠ” λ‹€λ₯Έ 문자둜 νŒλ‹¨λ˜λŠ” 것이죠.

whitespace ꡬ뢄

Hello, world

matches: Hello, world!

Hello, Β  Β  Β world

matches: Hello, world!

μ •κ·œμ‹μ€ whitespace(빈 곡간)도 ꡬ뢄을 ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ "Hello, world"와 "Hello, world"λŠ” λ‹€λ₯Έ 문자인 것이죠.

λ¬Έμžμ—΄μ˜ μœ„μΉ˜ μ°ΎκΈ°

찾고자 ν•˜λŠ” λ¬Έμžμ—΄μ˜ μœ„μΉ˜λ₯Ό μ œμ•½ν•΄μ„œ μ°Ύμ•„λ‚Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

Source:

who is who

^, $

^who

matches: who is who

^은 μ‹œμž‘λ˜λŠ” 뢀뢄이 쑰건일 λ•Œ μΆ©μ‘±ν•©λ‹ˆλ‹€.

who$

matches: who is who

λ°˜λŒ€λ‘œ $λŠ” λλ‚˜λŠ” 뢀뢄이 쑰건일 λ•Œ μΆ©μ‘±ν•©λ‹ˆλ‹€.

Notes:

λ¬Έμžμ—΄μ— 쑰건 κΈ°ν˜Έκ°€ 포함될 λ•ŒλŠ” μ–΄λ–»κ²Œ ν• κΉŒμš”? ($440κ³Ό 같이)

그럴 λ•ŒλŠ” \λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. \λŠ” \ 뒀에 μžˆλŠ” 문자λ₯Ό κΈ°ν˜Έκ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ΄λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. (\$)

문자의 유무 νŒλ‹¨ν•˜κΈ°

Source:

Regular expressions are powerful!!!

.

.

first match: Regular expressions are powerful!!!

matches: Regular expressions are powerful!!!

.은 μ–΄λ–€ 문자던 μ‘΄μž¬ν•˜λ©΄ μΆ©μ‘±ν•˜λŠ” μΌμ’…μ˜ μ™€μΌλ“œμΉ΄λ“œ μž…λ‹ˆλ‹€.

......

first match: Regular expressions are powerful!!!

matches: Regular expressions are powerful!!!

μ—¬λŸ¬ 개λ₯Ό μ‚¬μš©ν•΄μ„œ μ›ν•˜λŠ” 문자의 개수λ₯Ό 쑰건으둜 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

matchesμ—μ„œ 맨 끝의 "ul!!!"이 μ„ νƒλ˜μ§€ λͺ»ν•œ 것은 μ•žμ—μ„œλΆ€ν„° 6κ°œμ”©μ˜ 문자λ₯Ό 찾을 λ•Œ, 맨 λ’€μ˜ 5개 λ¬Έμžκ°€ 남기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ›ν•˜λŠ” νŠΉμ • λ¬Έμžλ“€ μ€‘μ—μ„œ μ°Ύμ•„λ‚΄κΈ°

λͺ¨λ“  문자 말고, λ‚΄κ°€ μ›ν•˜λŠ” νŠΉμ • λ¬Έμžκ°€ μžˆλ‹€λ©΄ μ–΄λ–»κ²Œ ν• κΉŒμš”?

[]

Source:

How do you do?

[oyu]

first match: How do you do?

matches: How do you do?

λŒ€κ΄„ν˜Έμ— λ‚΄κ°€ μ›ν•˜λŠ” 문자의 μ’…λ₯˜λ₯Ό λ„£μ–΄μ€ŒμœΌλ‘œμ¨ νŠΉμ • λ¬Έμžλ“€λ§Œ μ°Ύμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

[dH].

first match: How do you do?

matches: How do you do?

이 λ•Œ μ£Όμ˜ν•  점은, []μ•ˆμ˜ μ’…λ₯˜κ°€ μ–Όλ§ˆλ‚˜ λ§Žλ˜μ§€ 문자 **"ν•˜λ‚˜"**λ₯Ό μ˜λ―Έν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ˜ˆμ‹œμ˜ [dH].λŠ” dν˜Ήμ€ Hκ°€ ν¬ν•¨λœ ν•œκΈ€μžμ™€ κ·Έ 뒀에 λ”°λΌλΆ™λŠ” 아무 문자 ν•œκΈ€μžλ₯Ό μ°Ύμ•„λ‚΄λŠ” μ •κ·œμ‹μΈκ±°μ£ .

[-]

Source:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

그런데 쑰건으둜 넣을 λ¬Έμžκ°€ λ„ˆ~무 λ§Žμ„ λ–„λŠ” μ–΄λ–»κ²Œ ν•˜λ©΄ λ κΉŒμš”?

[CDEFGHIJK] 처럼 일일히 λ„£μ–΄μ€˜λ„ λ˜μ§€λ§Œ, -λ₯Ό μ‚¬μš©ν•΄ λ²”μœ„λ₯Ό ν‘œν˜„ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

[C-K]

first match: ABCDEFGHIJKLMNOPQRSTUVWXYZ

matches: ABCDEFGHIJKLMNOPQRSTUVWXYZ

[C-Ka-d2-6]

Source:

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 123456789

first match: ABCDEFGHJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 123456789

matches: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 123456789

[^]

μΉœμˆ™ν•œ ^κ°€ μ™”λ„€μš”. 그럼 [^]λŠ” 주어진 λ²”μœ„μ˜ λ¬Έμžλ“€ 쀑 ν•˜λ‚˜λ‘œ μ‹œμž‘λ˜λŠ” μ‘°κ±΄μΌκΉŒμš”?

μ•„μ‰½κ²Œλ„ μ•„λ‹™λ‹ˆλ‹€. ^κ°€ λŒ€κ΄„ν˜Έ μ•ˆμ— 왔을 λ•ŒλŠ”, NOT의 의미둜 μ‚¬μš©λ©λ‹ˆλ‹€.

Source:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

[^CD]

firstm match: ABCDEFGHIJKLMNOPQRSTUVWXYZ

matches: ABCDEFGHIJKLMNOPQRSTUVWXYZ

^둜 ν‘œν˜„λœ "CD"만 μ„ νƒμ—μ„œ μ œμ™Έλœ 것을 λ³Ό 수 있죠?

μ„œλΈŒνŒ¨ν„΄

λ™μ‹œμ— μ—¬λŸ¬κ°œμ˜ 쑰건을 주고싢을 λ•ŒλŠ” μ–΄λ–»κ²Œ ν• κΉŒμš”?

|λ₯Ό μ‚¬μš©ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€!

Source:

Monday Tuesday Friday

|

(on|ues|rida)

first match: Monday Tuesday Friday

matches: Monday Tuesday Friday

μ΄λ ‡κ²Œ μ—¬λŸ¬κ°œμ˜ 쑰건듀을 ν•œ λ²ˆμ— 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  κ΄„ν˜Έλ‘œ λ¬Άμ–΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” 점은 κΈ°μ–΅ν•΄λ‘¬μ•Όκ² λ„€μš”!

(Mon|Tues|Fri)day

matches: Monday Tuesday Friday

λ°œμƒν•  수 μžˆλŠ” 문자의 횟수 μ •ν•΄μ£ΌκΈ°

주어진 λ¬Έμžκ°€ λͺ‡ 번 λ“±μž₯ν•  수 μžˆλŠ”μ§€λ₯Ό μ •ν• μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžκ°€ μ΅œμ†Œ 3λ²ˆμ—μ„œ μ΅œλŒ€ 6λ²ˆκΉŒμ§€ λ“±μž₯ν•œ 문자λ₯Ό μ°Ύμ•„μ€˜! 와 같은 κ²½μš°μ— μ‚¬μš©ν•  수 있겠죠?

*, +, ?

Source:

aabc abc bc

a*b

first match: aabc abc bc

matches: aabc abc bc

*λŠ” μ•žμ˜ λ¬Έμžκ°€ 0회 ν˜Ήμ€ μ—¬λŸ¬κ°œκ°€ 올 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ˜ˆμ‹œλŠ” aκ°€ 있으면 λͺ¨λ“  a듀을 ν¬ν•¨ν•˜κ³ , κ·Έ 뒀에 bκ°€ ν•˜λ‚˜ μ™€μ•Όν•˜λŠ” 쑰건이겠죠?

a+b

first match: aabc abc bc

matches: aabc abc bc

+λŠ” μ•žμ˜ λ¬Έμžκ°€ 1회 ν˜Ήμ€ μ—¬λŸ¬κ°œκ°€ 올 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. *와 λ‹€λ₯Έ 점은 μ΅œμ†Œ ν•œ λ²ˆμ€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것이죠!

κ·Έλž˜μ„œ μ˜ˆμ‹œμ˜ "bc"λŠ” μ‘°κ±΄μ—μ„œ μ œμ™Έλ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆλ„€μš”.

a?b

first match: aabc abc bc

matches: aabc abc bc

?λŠ” μ•žμ˜ λ¬Έμžκ°€ 0회 ν˜Ήμ€ ν•œ 번 올 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

[-@]*

Source:

-@- *** -- "*" -- *** -@-

first match: -@- *** -- "*" -- *** -@-

matches: -@- *** -- "*" -- *** -@-

λŒ€κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” - ν˜Ήμ€ @듀을 μ°Ύμ•„λ‚΄λŠ” μ •κ·œμ‹μ΄κ² μ£ !?

[^ ]+

Source:

-@@@- * ** - - "*" -- * ** -@@@-

first match: -@@@ * ** - - "*" -- * ** -@@@-

matches: -@@@ * ** - - "*" -- * ** -@@@-

잘 μ•ˆλ³΄μ΄μ‹œκ² μ§€λ§Œ, 곡백(" ")을 μ œμ™Έν•œ λͺ¨λ“  λ¬Έμžλ“€μ„ μ„ νƒν•˜λŠ” μ •κ·œμ‹μž…λ‹ˆλ‹€.

μˆ˜λŸ‰μ„ 지정해 횟수 μ •ν•΄μ£ΌκΈ°

*, +, ?λŠ” λͺ¨λ‘ 횟수λ₯Ό 직접 정해쀄 수 μ—†μ—ˆμ£ ? μ€‘κ΄„ν˜Έ()λ₯Ό μ‚¬μš©ν•˜λ©΄ 이런 νšŸμˆ˜λ„ 정해쀄 μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Source:

One ring to bring them all and in the darkness bind them

.{5}

first match: One ring to bring them all and in the darkness bind them

matches: One ring to bring them all and in the darkness bind them

μ–΄λ–€ 문자건 5회 λ°œμƒν•  경우λ₯Ό μ°Ύμ•„λ‚΄λŠ” μ •κ·œμ‹μž…λ‹ˆλ‹€.

[els]{1,3}

fist match: One ring to bring them all and in the darkness bind them

matches: One ring to bring them all and in the darkness bind them

λŒ€κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” e, l, sκ°€ μ΅œμ†Œ 1회, μ΅œλŒ€ 3회 λ°œμƒν•˜λŠ” 경우λ₯Ό μ°Ύμ•„λ‚΄λŠ” μ •κ·œμ‹μ΄κ² λ„€μš”!

[a-z]{3,}

first match: One ring to bring them all and in the darkness bind them

matches: One ring to bring them all and in the darkness bind them

aλΆ€ν„° zκΉŒμ§€ (μ†Œλ¬Έμž)의 λ¬Έμžλ“€μ΄ μ΅œμ†Œ 3회 λ°˜λ³΅λ˜μ–΄ λ‚˜νƒ€λ‚˜λŠ” 경우λ₯Ό μ°ΎλŠ” μ •κ·œμ‹μž…λ‹ˆλ‹€.

μ€‘κ΄„ν˜Έμ˜ μ•žμ΄λ‚˜ λ’€ 숫자λ₯Ό μƒλž΅ν•˜λ©΄ 각각 μ΅œμ†Œ, μ΅œλŒ€ 횟수λ₯Ό 지정해주지 μ•Šκ² λ‹€λŠ” 의미둜 μ‚¬μš©λ©λ‹ˆλ‹€.

μˆ˜λŸ‰μž + ?:

μˆ˜λŸ‰μž 뒀에 ?λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•  μˆ˜λ„ μžˆλŠ”λ°μš”.. μ΄λ•ŒλŠ” ?의 μ˜λ―Έκ°€ 살짝 λ‹¬λΌμ§‘λ‹ˆλ‹€.

μ•žμ˜ μˆ˜λŸ‰μžλ₯Ό "lazy"ν•˜κ²Œ μ μš©ν•˜κ² λ‹€λŠ” μ˜λ―ΈμΈλ°μš”, Lazy QuantifierλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ•Œμ•„λ‘μ‹œλ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

μ˜λ―ΈλŠ” κ°€λŠ₯ν•œ 적은 문자λ₯Ό λ§€μΉ­μ‹œν‚€κ² λ‹€λŠ” λœ»μ΄μ—¬μ„œ 쑰건이 μ€‘μ²©λ˜μ–΄ λ°œμƒν•  λ•Œ, 쀑첩을 λ”°λ‘œ μ²˜λ¦¬ν•  지 ν˜Ήμ€ ν†΅μ±„λ‘œ μ²˜λ¦¬ν•΄λ²„λ¦΄μ§€λ₯Ό 결정해쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

Source:

text
text2

<div>.+</div>

first match: <div>text</div><div>text2</div>

μ˜λ„λŠ” 각 div νƒœκ·Έλ“€μ„ λΆ„λ¦¬ν•΄μ„œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμ΄μ˜€μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 맨 μ•žμ˜ <div> νƒœκ·Έμ™€ 맨 λ’€μ˜ </div> νƒœκ·Έκ°€ 쑰건에 λ§žμœΌλ©΄μ„œ κ·Έ μ€‘κ°„μ˜ λͺ¨λ“  λ¬Έμžλ“€μ΄ ν¬ν•¨λ˜κ³  λ§μ•˜μ£ .

<div>.+?</div>

first match: <div>text</div><div>text2</div>

?λ₯Ό μ‚¬μš©ν•΄ lazyν•˜κ²Œ 쑰건을 μ μš©ν•΄μ€ŒμœΌλ‘œμ¨ κ°€λŠ₯ν•œ 적은 문자λ₯Ό λ§€μΉ­μ‹œν‚¨ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

Character Class

μ •κ·œμ‹μ—λŠ” μ§€κΈˆκΉŒμ§€ μ‚¬μš©ν•œ κ²½μš°λ“€ 쀑 자주 μ“°μ΄λŠ” κ²½μš°λ“€μ„ μ’€ 더 κ°„νŽΈν•œ λ°©μ‹μœΌλ‘œ μ œκ³΅ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.

Source:

A1 B2 c3 d_4 e:5 ffGG77--___--

캐릭터 클래슀

\w

matches: A1 B2 c3 d_4 e:5 ffGG77--___--

wλŠ” wordλ₯Ό μ€„μ—¬μ„œ 뢙인 λ§μž…λ‹ˆλ‹€.

μ•ŒνŒŒλ²³, 숫자, 언더바(_)λ₯Ό 톡 ν‹€μ–΄μ„œ \w둜 ν‘œν˜„ν•  수 μžˆλŠ”κ±°μ£ ..!

κ·ΈλŸ¬λ‹ˆκΉŒ \wλŠ” [A-z0-9_]와 같은 ν‘œν˜„μΈκ²λ‹ˆλ‹€.

Notes: 곡백은 word에 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

\W

matches: A1 B2 c3 d_4 e:5 ffGG77 -- ___ --

μ΄λ²ˆμ—” wκ°€ λŒ€λ¬Έμžμž…λ‹ˆλ‹€.

캐릭터 클래슀 ν‘œν˜„μ—μ„œ λŒ€λ¬ΈμžλŠ” μ†Œλ¬Έμžμ˜ μ •λ°˜λŒ€μ˜ 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

그러면 \WλŠ” wordκ°€ μ•„λ‹ˆλ‹€. λΌλŠ” 의미λ₯Ό κ°€μ§€κ²Œ λ˜λŠ” 것이죠.

μ˜ˆμ‹œμ˜ 경우 쀑간에 μžˆλŠ” -만 포함이 λλ„€μš”.

\d

matches: A1 B2 c3 d_4 e:5 ffGG77--___--

dλŠ” digit을 쀄인 λ§μž…λ‹ˆλ‹€.

숫자λ₯Ό μ˜λ―Έν•˜λŠ” ν‘œν˜„μ΄κ² μ£ !

\b

bλŠ” boundaryλ₯Ό 쀄인 λ§μž…λ‹ˆλ‹€.

주어진 쑰건을 \w와 \W 의 κ²½κ³„μ—μ„œ μ°Ύμ•„λ‚Έλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

word와 wordκ°€ μ•„λ‹Œ 경계에 μžˆλŠ” μš”μ†Œλ“€ μ€‘μ—μ„œ μ°Ύκ² λ‹€λŠ” μ˜λ―ΈμΈλ°μš”..

Source: cat concat

\bcat

matches: cat concat

cat의 μ•žμ΄ 문자(n)와 λΆ™μ–΄μžˆλŠ” concat 은 선택이 λ˜μ§€ μ•Šμ•˜μ£ ?

cat\b

matches: cat concat

이 κ²½μš°λŠ” concat의 뒀에 λ¬Έμžκ°€ μ—†μœΌλ‹ˆ 선택이 λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

\A, \Z

이 λ‘˜μ€ ^, $와 μœ μ‚¬ν•œ κΈ°λŠ₯을 ν•©λ‹ˆλ‹€.

각각 맨 μ•žμ˜ μš”μ†Œμ™€ 맨 λ’€μ˜ μš”μ†Œλ₯Ό μ°ΎλŠ”λ°μš”..

^와 $μ™€μ˜ 차이점이라면 multilineμ—μ„œλ„ λͺ¨λ“  라인에 λŒ€ν•΄ 적용이 λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

Source: Test 1

Test 2

Test 3

^Test

matches: Test 1 \n Test 2 \n Test 3

\ATest

matches: Test 1 \n Test 2 \n Test 3

차이λ₯Ό λ°”λ‘œ μ•Œ 수 있죠?


λ‹€μŒ ν¬μŠ€νŠΈμ—μ„œλŠ” 이런 μ •κ·œμ‹μ„ Swiftμ—μ„œ μ–΄λ–»κ²Œ λ‹€λ£¨λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

Reference

μƒν™œμ½”λ”© - μ •κ·œν‘œν˜„μ‹