Skip to content

Latest commit

Β 

History

History
460 lines (311 loc) Β· 28.5 KB

README-ko.md

File metadata and controls

460 lines (311 loc) Β· 28.5 KB


Learn Regex

λ²ˆμ—­:

μ •κ·œν‘œν˜„μ‹μ΄λž€ 무엇인가?

μ •κ·œν‘œν˜„μ‹μ€ ν…μŠ€νŠΈμ—μ„œ νŠΉμ • νŒ¨ν„΄μ„ μ°Ύμ•„λ‚΄λŠ”λ° μ‚¬μš©λ˜λŠ” 문자 ν˜Ήμ€ κΈ°ν˜Έλ“€μ˜ 집합이닀.

μ •κ·œν‘œν˜„μ‹(Regular expression)은 λŒ€μƒ λ¬Έμžμ—΄μ— μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½ λ°©ν–₯으둜 λ§€μΉ­λ˜λŠ” ν•˜λ‚˜μ˜ νŒ¨ν„΄μ΄λ‹€. "Regular expression"이라고 맀번 λ°œμŒν•˜κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ—, 보톡 μ•½μ–΄λ‘œ "regex" ν˜Ήμ€ "regexp", "μ •κ·œμ‹"으둜 μΆ•μ•½λ˜μ–΄ μ‚¬μš©λœλ‹€. μ •κ·œ ν‘œν˜„μ‹μ€ λ¬Έμžμ—΄ λ‚΄λΆ€μ˜ ν…μŠ€νŠΈ λŒ€μ²΄, 포맷의 μœ νš¨μ„± 검사, νŒ¨ν„΄ 맀칭을 κΈ°λ°˜μœΌλ‘œν•œ λ¬Έμžμ—΄μ—μ„œ 일뢀 ν…μŠ€νŠΈλ₯Ό μΆ”μΆœ, 그리고 κ·Έ 외에 λ‹€μ–‘ν•œ λͺ©μ μ„ μœ„ν•΄ μ‚¬μš©λœλ‹€.

당신이 ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜κ³  있고 μ‚¬μš©μžκ°€ μ‚¬μš©μžλͺ…을 선택할 λ•Œ μ‚¬μš©λ˜λŠ” κ·œμΉ™λ“€μ„ μ •ν•˜κ³  μ‹Άλ‹€κ³  μƒμƒν•΄λ³΄μž. 예λ₯Ό λ“€μ–΄, μš°λ¦¬λŠ” μ‚¬μš©μžλͺ…에 문자, 숫자, 밑쀄 문자(_), 그리고 ν•˜μ΄ν”ˆμ΄ ν¬ν•¨λ˜λŠ” 것은 ν—ˆμš©ν•˜κ³  μ‹Άλ‹€. λ˜ν•œ, μ‚¬μš©μžλͺ…μ˜ κΈ€μžμˆ˜λ₯Ό μ œν•œν•΄μ„œ μ‚¬μš©μžλͺ…이 지저뢄해보이지 μ•Šλ„λ‘ ν•˜κ³  μ‹Άλ‹€. μ΄λ•Œ μ•„λž˜ μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•΄ μž…λ ₯된 μ‚¬μš©μžλͺ…이 ν•΄λ‹Ή κ·œμΉ™μ— λ§žλŠ”μ§€ 검사할 수 μžˆλ‹€.



Regular expression

μœ„μ˜ μ •κ·œ ν‘œν˜„μ‹μ€ john_doe, jo-hn_doe, 그리고 john12_as λ¬Έμžμ—΄μ„ 받아듀일 수 μžˆλ‹€. JoλŠ” λŒ€λ¬Έμžλ₯Ό ν¬ν•¨ν•˜κ³  있고 길이가 λ„ˆλ¬΄ 짧기 λ•Œλ¬Έμ— μœ„μ˜ μ •κ·œν‘œν˜„μ‹κ³Ό λ§€μΉ­λ˜μ§€ μ•ŠλŠ”λ‹€.

λͺ©μ°¨

1. 기본 맀쳐

ν•˜λ‚˜μ˜ μ •κ·œ ν‘œν˜„μ‹μ€ 단지 ν…μŠ€νŠΈ λ‚΄λΆ€μ˜ 검색을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λ¬Έμžμ—΄μ˜ νŒ¨ν„΄μ΄λ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ theλŠ” 문자 t λ‹€μŒμ— 문자 h, κ·Έ λ‹€μŒμ— 문자 eκ°€ λ‚˜μ˜€λŠ” 것을 μ˜λ―Έν•œλ‹€.

"the" => The fat cat sat on the mat.

Test the regular expression

μ •κ·œ ν‘œν˜„μ‹ 123은 λ¬Έμžμ—΄ 123에 λ§€μΉ­λœλ‹€. μ •κ·œ ν‘œν˜„μ‹μ€ μ •κ·œ ν‘œν˜„μ‹μ˜ 각 문자(Character)와 μž…λ ₯된 λ¬Έμžμ—΄μ˜ 각 문자(Character)λ₯Ό λΉ„κ΅ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή λ¬Έμžμ—΄κ³Ό λ§€μΉ­λœλ‹€. μ •κ·œ ν‘œν˜„μ‹λ“€μ€ 일반적으둜 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜κΈ° λ•Œλ¬Έμ—, μ •κ·œ ν‘œν˜„μ‹ TheλŠ” λ¬Έμžμ—΄ the와 λ§€μΉ­λ˜μ§€ μ•ŠλŠ”λ‹€.

"The" => The fat cat sat on the mat.

Test the regular expression

2. 메타 문자

메타 λ¬Έμžλ“€μ€ μ •κ·œ ν‘œν˜„μ‹μ˜ λΉŒλ”© 블락듀이닀. 메타 λ¬Έμžλ“€μ€ 자체적인 의미λ₯Ό 가지지 μ•Šκ³  νŠΉλ³„ν•œ λ°©μ‹μœΌλ‘œ ν•΄μ„λ˜μ–΄μ§„λ‹€. μ–΄λ–€ 메타 λ¬Έμžμ—΄λ“€μ€ νŠΉλ³„ν•œ 의미λ₯Ό 가지며 λŒ€κ΄„ν˜Έμ•ˆμ—μ„œ 쓰인닀. μ•„λž˜λŠ” μ΄λŸ¬ν•œ 메타 λ¬Έμžμ—΄λ“€μ΄λ‹€:

메타 문자 μ„€λͺ…
. 온점(Period)λŠ” μ€„λ°”κΏˆμ„ μ œμ™Έν•œ μ–΄λ–€ μ’…λ₯˜μ˜ 단일 λ¬Έμžμ™€ 맀치.
[ ] 문자 클래슀. λŒ€κ΄„ν˜Έ 사이에 μžˆλŠ” λ¬Έμžλ“€λ‘œ 맀치.
[^ ] λΆ€μ • 문자 클래슀. λŒ€κ΄„ν˜Έ μ•ˆμ— ν¬ν•¨λ˜μ§€ μ•Šμ€ λͺ¨λ“  λ¬Έμžλ“€λ‘œ 맀치.
* 이 메타 문자의 λ°”λ‘œ μ•žμ— μžˆλŠ” 심볼이 0번 이상 반볡된 λ¬Έμžλ“€κ³Ό 맀치.
+ 이 메타 문자의 λ°”λ‘œ μ•žμ— μžˆλŠ” 심볼이 ν•œλ²ˆ 이상 반볡된 λ¬Έμžλ“€κ³Ό 맀치.
? 이 메타 문자의 λ°”λ‘œ μ•žμ— μžˆλŠ” 심볼을 선택적(optional)으둜 λ§Œλ“¬.
{n,m} μ€‘κ΄„ν˜Έ. 이 메타 문자의 λ°”λ‘œ μ•žμ— μœ„μΉ˜ν•œ 심볼이 μ΅œμ†Œ n번 μ΅œλŒ€ m번의 반볡된 λ¬Έμžλ“€κ³Ό 맀치.
(xyz) 문자 κ·Έλ£Ή. λ¬Έμžμ—΄ xyz와 μ •ν™•νžˆ 같은 μˆœμ„œλ₯Ό 가진 λ¬Έμžλ“€κ³Ό 맀치.
| λŒ€μ•ˆ. λ¬Έμžκ°€ 이 메타 문자의 μ•žμ— μžˆλŠ” μ‹¬λ³Όμ΄κ±°λ‚˜ 뒀에 μžˆλŠ” 심볼이면 맀치.
\ λ‹€μŒ 문자 μ΄μŠ€μΌ€μ΄ν”„(Escape). μ˜ˆμ•½λœ λ¬Έμžμ—΄λ“€ [ ] ( ) { } . * + ? ^ $ \ |을 μ΄μŠ€μΌ€μ΄ν•‘ν•¨μœΌλ‘œμ¨ κ·Έ μžμ²΄μ™€ λ§€μΉ­λ˜λŠ” 것을 ν—ˆμš©.
^ μž…λ ₯의 μ‹œμž‘κ³Ό 맀치.
$ μž…λ ₯의 끝과 맀치.

2.1 λ§ˆμΉ¨ν‘œ

λ§ˆμΉ¨ν‘œ(.)λŠ” 메타 문자의 κ°€μž₯ κ°„λ‹¨ν•œ μ˜ˆλ‹€. 메타 문자 .λŠ” μ–΄λ– ν•œ 단일 λ¬Έμžμ™€λ„ λ§€μΉ˜λ˜μ§€λ§Œ 리턴 ν˜Ήμ€ κ°œν–‰ λ¬Έμžμ™€λŠ” λ§€μΉ˜λ˜μ§€ μ•ŠλŠ”λ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ .ar은 μ–΄λ– ν•œ 단일 문자 λ‹€μŒμ— 문자 aκ°€ 였고, κ·Έ λ‹€μŒμ— 문자 r이 μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

".ar" => The car parked in the garage.

Test the regular expression

2.2 문자 집합

문자 집합은 문자 ν΄λž˜μŠ€λΌκ³ λ„ λΆˆλ¦°λ‹€. λŒ€κ΄„ν˜ΈλŠ” 이 문자 집합을 λͺ…μ‹œν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. λ¬Έμžμ—΄ 집합내에 μ‚¬μš©λœ ν•˜μ΄ν”ˆμ€ λ¬Έμžλ“€μ˜ λ²”μœ„λ₯Ό μ§€μ •ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λŒ€κ΄„ν˜Έ 내뢀에 λͺ…μ‹œλœ λ¬Έμžλ“€μ˜ μˆœμ„œλŠ” μ€‘μš”ν•˜μ§€ μ•Šλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [Tt]heλŠ” λŒ€λ¬Έμž T ν˜Ήμ€ μ†Œλ¬Έμž tκ°€ λ‚˜μ˜¨ λ‹€μŒμ—, 문자 hκ°€ λ‚˜μ˜€κ³  κ·Έ 뒀에 문자 eκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[Tt]he" => The car parked in the garage.

Test the regular expression

ν•˜μ§€λ§Œ, 문자 집합 λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” 온점(Period)은 온점 κ·Έ 자체λ₯Ό μ˜λ―Έν•œλ‹€. μ •κ·œ ν‘œν˜„μ‹ ar[.]은 μ†Œλ¬Έμž a λ‹€μŒμ— 문자 r이 였고 κ·Έ 뒀에 문자 .이 μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"ar[.]" => A garage is a good place to park a car.

Test the regular expression

2.2.1 λΆ€μ • 문자 집합

일반적으둜, 캐럿 기호(^)λŠ” λ¬Έμžμ—΄μ˜ μ‹œμž‘μ§€μ μ„ λ‚˜νƒ€λ‚΄μ§€λ§Œ, μ™Όμͺ½ λŒ€κ΄„ν˜Έ λ°”λ‘œ 뒀에 μœ„μΉ˜ν–ˆμ„λ•ŒλŠ” ν•΄λ‹Ή 문자 μ§‘ν•©μ˜ λΆ€μ •(negation)을 λ‚˜νƒ€λ‚Έλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [^c]ar은 문자 cλ₯Ό μ œμ™Έν•œ μ–΄λ– ν•œ λ¬Έμžλ’€μ— 문자 aκ°€ 였고, κ·Έ 뒀에 문자 r이 μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[^c]ar" => The car parked in the garage.

Test the regular expression

2.3 반볡

메타 문자 +, * λ˜λŠ” ?은 ν•˜μœ„νŒ¨ν„΄(subpattern)이 λͺ‡ 번 λ°œμƒν•˜λŠ”μ§€ μ§€μ •ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. μ΄λŸ¬ν•œ 메타 λ¬Έμžλ“€μ€ 상황에 따라 λ‹€λ₯΄κ²Œ λ™μž‘ν•œλ‹€.

2.3.1 별 λΆ€ν˜Έ

* λΆ€ν˜ΈλŠ” λΆ€ν˜Έ μ•žμ— μœ„μΉ˜ν•œ 맀처(matcher)κ°€ 0번 이상 반볡된 λ¬Έμžμ—΄κ³Ό λ§€μΉ˜λœλ‹€. μ •κ·œ ν‘œν˜„μ‹ a*은 μ†Œλ¬Έμž aκ°€ 0번 이상 λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. ν•˜μ§€λ§Œ, λ§Œμ•½ 이 별 λΆ€ν˜Έκ°€ 문자 집합(character set) 직후에 λ‚˜μ˜€λŠ” κ²½μš°μ—λŠ” 문자 집합 μ „μ²΄μ˜ λ°˜λ³΅μ„ μ°Ύκ²Œλœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [a-z]*은 μ†Œλ¬Έμžλ“€μ΄ κ°―μˆ˜μ™€ 상관없이 μ—°μ†μœΌλ‘œ λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[a-z]*" => The car parked in the garage #21.

Test the regular expression

* λΆ€ν˜ΈλŠ” 메타 문자 .와 ν•¨κ»˜ λͺ¨λ“  λ¬Έμžμ—΄κ³Ό λ§€μΉ˜λ˜λŠ” νŒ¨ν„΄μ„ λ§Œλ“œλŠ”λ° μ‚¬μš©λ  수 μžˆλ‹€. λ˜ν•œ, * λΆ€ν˜ΈλŠ” 곡백 문자 \s와 ν•¨κ»˜ 곡백 λ¬Έμžλ“€λ‘œ 이루어진 λ¬Έμžμ—΄κ³Ό λ§€μΉ˜λ˜λŠ” νŒ¨ν„΄μ„ λ§Œλ“œλŠ”λ° μ‚¬μš©λ  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ \s*cat\s*λŠ” 0번 이상 κ³΅λ°±λ¬Έμžκ°€ λ‚˜μ˜¨ 이후에 μ†Œλ¬Έμž c, μ†Œλ¬Έμž a, μ†Œλ¬Έμž tκ°€ 자체둜 λ‚˜μ˜€κ³  κ·Έ 뒀에 λ‹€μ‹œ 0번 μ΄μƒμ˜ κ³΅λ°±λ¬Έμžκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"\s*cat\s*" => The fat cat sat on the concatenation.

Test the regular expression

2.3.2 λ§μ…ˆ λΆ€ν˜Έ

+ λΆ€ν˜ΈλŠ” λΆ€ν˜Έ μ•žμ— μœ„μΉ˜ν•œ λ¬Έμžκ°€ ν•œλ²ˆ 이상 λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ λ§Œλ“œλŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ c.+tλŠ” μ†Œλ¬Έμž cκ°€ λ‚˜μ˜€κ³ , κ·Έ 뒀에 ν•œκ°œ μ΄μƒμ˜ λ¬Έμžκ°€ λ‚˜μ˜¨ ν›„, μ†Œλ¬Έμž tκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. μ—¬κΈ°μ„œ 문자 tλŠ” ν•΄λ‹Ή λ¬Έμž₯의 제일 λ§ˆμ§€λ§‰ κΈ€μž tλΌλŠ”κ²ƒμ„ λͺ…ν™•νžˆν•  ν•„μš”κ°€ μžˆλ‹€.

"c.+t" => The fat cat sat on the mat.

Test the regular expression

2.3.3 λ¬ΌμŒν‘œ

μ •κ·œ ν‘œν˜„μ‹μ—μ„œ 메타 문자 ?λŠ” μ„ ν–‰ 문자λ₯Ό μ„ νƒμ μœΌλ‘œ λ§Œλ“œλŠ” 역할을 ν•œλ‹€. λ¬ΌμŒν‘œλŠ” λΆ€ν˜Έ μ•žμ— 쓰여진 λ¬Έμžκ°€ μ„ νƒμ μœΌλ‘œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [T]?heλŠ” λŒ€λ¬Έμž Tκ°€ μ„ νƒμ μœΌλ‘œ λ‚˜μ˜¨ 이후에, κ·Έ 뒀에 μ†Œλ¬Έμž h, κ·Έ 뒀에 μ†Œλ¬Έμž eκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[T]he" => The car is parked in the garage.

Test the regular expression

"[T]?he" => The car is parked in the garage.

Test the regular expression

2.4 μ€‘κ΄„ν˜Έ

μ •κ·œ ν‘œν˜„μ‹μ—μ„œ μ •λŸ‰μž(quantifier)라고도 λΆˆλ¦¬λŠ” μ€‘κ΄„ν˜ΈλŠ” ν•˜λ‚˜μ˜ 문자 ν˜Ήμ€ 문자 μ§‘ν•©μœΌλ‘œ ν‘œμ‹œλœ λ¬Έμžκ°€ λͺ‡λ²ˆ λ°˜λ³΅λ˜λŠ”μ§€ λͺ…μ‹œν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [0-9]{2,3}은 숫자 문자(0λΆ€ν„° 9μ‚¬μ΄μ˜ 문자)κ°€ μ΅œμ†Œ 2번, μ΅œλŒ€ 3번 μ—°μ†ν•΄μ„œ λ‚˜μ˜€λŠ” λ¬Έμžμ—΄ νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.

Test the regular expression

λ‘λ²ˆμ§Έ 숫자λ₯Ό μƒλž΅ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [0-9]{2,}λŠ” 2번 μ΄μƒμ˜ μˆ«μžκ°€ μ—°μ†μœΌλ‘œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. λ§Œμ•½ μ—¬κΈ°μ„œ μ‰Όν‘œλ₯Ό μ‚­μ œν•˜λŠ” 경우, μ •κ·œ ν‘œν˜„μ‹ [0-9]{3}은 μˆ«μžκ°€ μ •ν™•νžˆ 3번 μ—°μ†ν•΄μ„œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.

Test the regular expression

"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.

Test the regular expression

2.5 캑쳐링 그룹

캑쳐링 그룹은 κ΄„ν˜Έ (...) μ•ˆμ— 쓰여진 ν•˜μœ„ νŒ¨ν„΄λ“€μ˜ 그룹이닀. μœ„μ—μ„œ λ…Όμ˜ν–ˆλ“―μ΄, μ •κ·œ ν‘œν˜„μ‹μ—μ„œ ν•˜λ‚˜μ˜ 문자 뒀에 μ •λŸ‰μž(quantifier)λ₯Ό λ„£λŠ” κ²½μš°μ—λŠ” ν•΄λ‹Ή 문자의 λ°˜λ³΅μ„ λ‚˜νƒ€λ‚Έλ‹€. ν•˜μ§€λ§Œ, λ§Œμ•½ ν•˜λ‚˜μ˜ 캑쳐링 κ·Έλ£Ή 뒀에 μ •λŸ‰μžλ₯Ό λ„£λŠ” κ²½μš°μ—λŠ” 캑쳐링 κ·Έλ£Ή μ „μ²΄μ˜ λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄κ²Œ λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (ab)*λŠ” 문자 "ab"κ°€ 0번 이상 λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. λŒ€μ•ˆ λΆ€ν˜ΈμΈ | λ˜ν•œ 문자 κ·Έλ£Ή λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (c|g|p)ar은 μ†Œλ¬Έμž c, g ν˜Ήμ€ pκ°€ λ‚˜μ˜¨ 이후에 문자 aκ°€ λ‚˜μ˜€κ³  κ·Έ 뒀에 문자 r이 λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(c|g|p)ar" => The car is parked in the garage.

Test the regular expression

캑처링 그룹은 λΆ€λͺ¨ μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 문자λ₯Ό μΌμΉ˜μ‹œν‚¬λΏλ§Œ μ•„λ‹ˆλΌ 문자λ₯Ό μΊ‘μ²˜ν•œλ‹€λŠ” 점에 μœ μ˜ν•΄μ•Ό ν•œλ‹€. λΆ€λͺ¨ μ–Έμ–΄λŠ” νŒŒμ΄μ¬μ΄λ‚˜ μžλ°” 슀크립트 λ˜λŠ” ν•¨μˆ˜ μ •μ˜μ—μ„œ μ •κ·œ ν‘œν˜„μ‹μ„ κ΅¬ν˜„ν•˜λŠ” 거의 λͺ¨λ“  μ–Έμ–΄κ°€ 될 수 μžˆλ‹€.

2.5.1 λ…Ό-캑쳐링 κ·Έλ£Ή

λ…Ό-캑쳐링 그룹은 였직 λ¬Έμžμ—΄μ— λ§€μΉ­λ˜μ§€λ§Œ, 그룹을 μΊ‘μ³ν•˜μ§€ μ•ŠλŠ” 캑쳐링 그룹이닀. λ…Ό-캑쳐링 그룹은 (...) κ΄„ν˜Έμ•ˆμ— ?: 둜 ν‘œμ‹œλœλ‹€. 예λ₯Ό λ“€μ–΄ μ •κ·œμ‹ (?:c|g|p)ar λŠ” (c|g|p)ar와 같은 λ¬Έμžμ—΄μ„ λ§€μΉ­ν•˜λŠ” κ²ƒμ—μ„œ μœ μ‚¬ν•˜μ§€λ§Œ, 캑쳐링 그룹을 λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€.

"(?:c|g|p)ar" => The car is parked in the garage.

Test the regular expression

λ…Ό-캑처링 그룹은 μ°ΎκΈ° 및 λ³€κ²½ κΈ°λŠ₯μ—μ„œ μ‚¬μš©ν•˜κ±°λ‚˜ 캑처 κ·Έλ£Ή ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ λ‹€λ₯Έ μ’…λ₯˜μ˜ 좜λ ₯ μƒμ„±μ‹œ overviewλ₯Ό μœ μ§€ν•  λ•Œ μœ μš©ν•˜λ‹€. λ˜ν•œ 4. 전후방탐색λ₯Ό 보아라.

2.6 λŒ€μ•ˆ λΆ€ν˜Έ

μ •κ·œ ν‘œν˜„μ‹μ—μ„œ 수직 λ§‰λŒ€ λΆ€ν˜Έ |λŠ” λŒ€μ•ˆμ„ μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λŒ€μ•ˆ λΆ€ν˜ΈλŠ” μ—¬λŸ¬κ°œμ˜ ν‘œν˜„μ‹λ“€ μ‚¬μ΄μ˜ 쑰건과도 κ°™λ‹€. μ§€κΈˆμ―€ 당신은 문자 집합(Character set)κ³Ό λŒ€μ•ˆ λΆ€ν˜Έκ°€ λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€κ³  μƒκ°ν•˜κ³  μžˆμ„ 것이닀. ν•˜μ§€λ§Œ, 문자 집합과 λŒ€μ•ˆ λΆ€ν˜Έ μ‚¬μ΄μ˜ κ°€μž₯ 큰 차이점은 문자 집합은 문자 μˆ˜μ€€μ—μ„œ λ™μž‘ν•˜λŠ” 반면, λŒ€μ•ˆ λΆ€ν˜ΈλŠ” ν‘œν˜„μ‹ μˆ˜μ€€μ—μ„œ λ™μž‘ν•œλ‹€λŠ” 것이닀. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (T|t)he|carλŠ” λŒ€λ¬Έμž T ν˜Ήμ€ μ†Œλ¬Έμž tκ°€ λ‚˜μ˜€κ³  문자 h, 문자 eκ°€ μ°¨λ‘€λ‘œ λ‚˜μ˜€κ±°λ‚˜ 문자 c, 문자 a, 문자 r이 μ°¨λ‘€λ‘œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(T|t)he|car" => The car is parked in the garage.

Test the regular expression

2.7 특수 문자 μ΄μŠ€μΌ€μ΄ν•‘

λ°± μŠ¬λž˜μ‹œ \λŠ” μ •κ·œ ν‘œν˜„μ‹μ—μ„œ λ‹€μŒμ— λ‚˜μ˜€λŠ” λΆ€ν˜Έλ₯Ό μ΄μŠ€μΌ€μ΄ν•‘ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λ°± μŠ¬λž˜μ‹œλŠ” μ˜ˆμ•½ λ¬Έμžλ“€μΈ { } [ ] / \ + * . $ ^ | ?λ₯Ό 메타 λΆ€ν˜Έκ°€ μ•„λ‹Œ 문자 κ·Έ 자체둜 λ§€μΉ­λ˜λ„λ‘ λͺ…μ‹œν•œλ‹€. 특수 문자λ₯Ό 맀칭 μΊλ¦­ν„°λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°± μŠ¬λž˜μ‹œ \λ₯Ό ν•΄λ‹Ή 특수 문자 μ•žμ— 뢙이면 λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ .은 κ°œν–‰μ„ μ œμ™Έν•œ μ–΄λ–€ λ¬Έμžμ™€ λ§€μΉ­λœλ‹€. μž…λ ₯ λ¬Έμžμ—΄μ— ν¬ν•¨λœ . 문자λ₯Ό λ§€μΉ˜μ‹œν‚€λŠ” μ •κ·œ ν‘œν˜„μ‹ (f|c|m)at\.?은 μ†Œλ¬Έμž f, c λ˜λŠ” m 이후에 μ†Œλ¬Έμž a와 tκ°€ μ°¨λ‘€λ‘œ λ“±μž₯ν•˜κ³  이후에 문자 .κ°€ μ„ νƒμ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(f|c|m)at\.?" => The fat cat sat on the mat.

Test the regular expression

2.8 액컀 λΆ€ν˜Έ

μ •κ·œ ν‘œν˜„μ‹μ—μ„œ μ•΅μ»€λŠ” 맀칭 λ¬Έμžκ°€ ν‘œν˜„μ‹μ˜ μ‹œμž‘ λ¬ΈμžμΈμ§€ ν˜Ήμ€ 끝 λ¬ΈμžμΈμ§€ λͺ…μ‹œν•˜λŠ”λ° μ‚¬μš©λœλ‹€. μ•΅μ»€λŠ” 두가지 μ’…λ₯˜κ°€ μžˆλ‹€: 첫번째 μ’…λ₯˜μΈ 캐럿 λΆ€ν˜Έ ^λŠ” 맀칭 λ¬Έμžκ°€ μž…λ ₯ λ¬Έμžμ—΄μ˜ 첫 μ‹œμž‘ λ¬ΈμžμΈμ§€ λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©λ˜λ©° λ‘λ²ˆμ§Έ μ’…λ₯˜μΈ λ‹¬λŸ¬ λΆ€ν˜Έ $λŠ” ν•΄λ‹Ή 맀칭 λ¬Έμžκ°€ μž…λ ₯ 문자의 λ§ˆμ§€λ§‰ λ¬ΈμžλΌλŠ” 것을 λͺ…μ‹œν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

2.8.1 캐럿 λΆ€ν˜Έ

캐럿 λΆ€ν˜Έ ^λŠ” 맀칭 λ¬Έμžκ°€ ν‘œν˜„μ‹μ˜ μ‹œμž‘μ΄λΌλŠ” 것을 λͺ…μ‹œν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λ§Œμ•½ (aκ°€ μ‹œμž‘ λ¬ΈμžμΈμ§€ ν™•μΈν•˜λŠ”) μ •κ·œ ν‘œν˜„μ‹ ^aλ₯Ό μž…λ ₯ λ¬Έμžμ—΄ abc에 μ μš©ν•˜λ©΄, 이 μ •κ·œ ν‘œν˜„μ‹μ€ aλ₯Ό 맀칭 κ²°κ³Όκ°’μœΌλ‘œ 내보낸닀. 반면, μ •κ·œ ν‘œν˜„μ‹ ^bλ₯Ό μœ„μ˜ μž…λ ₯ λ¬Έμžμ—΄μ— μ μš©ν•˜λ©΄, μ•„λ¬΄λŸ° 맀칭도 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€. μ™œλƒν•˜λ©΄ μž…λ ₯ λ¬Έμžμ—΄ abcμ—μ„œ "b"λŠ” 처음 μ‹œμž‘ λ¬Έμžκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€. 또 λ‹€λ₯Έ μ •κ·œ ν‘œν˜„μ‹μΈ ^(T|t)heλ₯Ό μ‚΄νŽ΄λ³΄μž. 이 μ •κ·œ ν‘œν˜„μ‹μ€ λŒ€λ¬Έμž T λ˜λŠ” μ†Œλ¬Έμž tκ°€ μž…λ ₯ λ¬Έμžμ—΄μ˜ μ‹œμž‘μœΌλ‘œ λ‚˜μ˜€κ³ , κ·Έ 뒀에 문자 h와 문자 eκ°€ μ°¨λ‘€λ‘œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(T|t)he" => The car is parked in the garage.

Test the regular expression

"^(T|t)he" => The car is parked in the garage.

Test the regular expression

2.8.2 λ‹¬λŸ¬ λΆ€ν˜Έ

λ‹¬λŸ¬ λΆ€ν˜Έ $λŠ” μž…λ ₯ λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰ λ¬Έμžκ°€ 맀칭 문자둜 λλ‚˜λŠ”μ§€ ν™•μΈν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (at\.)$λŠ” μ†Œλ¬Έμž a와 t 그리고 문자 .κ°€ μˆœμ„œλŒ€λ‘œ μž…λ ₯ λ¬Έμžμ—΄μ˜ 맨 λ§ˆμ§€λ§‰μ— λ‚˜μ˜€λŠ”μ§€ ν™•μΈν•˜λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(at\.)" => The fat cat. sat. on the mat.

Test the regular expression

"(at\.)$" => The fat cat. sat. on the mat.

Test the regular expression

3. λ‹¨μΆ•ν˜• λ¬Έμžμ—΄ 집합

μ •κ·œ ν‘œν˜„μ‹μ€ 일반적으둜 μ‚¬μš©λ˜λŠ” λ¬Έμžμ—΄ 집합듀을 κ°„νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ—¬λŸ¬ λ‹¨μΆ•ν˜•λ“€μ„ μ œκ³΅ν•œλ‹€. λ‹¨μΆ•ν˜• λ¬Έμžμ—΄ 집합은 μ•„λž˜μ™€ κ°™λ‹€.

λ‹¨μΆ•ν˜• μ„€λͺ…
. κ°œν–‰μ„ μ œμ™Έν•œ λͺ¨λ“  문자
\w 영숫자 λ¬Έμžμ™€ 맀치: [a-zA-Z0-9_]
\W 영숫자 λ¬Έμžκ°€ μ•„λ‹Œ λ¬Έμžμ™€ 맀치: [^\w]
\d μˆ«μžμ™€ 맀치: [0-9]
\D μˆ«μžκ°€ μ•„λ‹Œ λ¬Έμžμ™€ 맀치: [^\d]
\s 곡백 λ¬Έμžμ™€ 맀치: [\t\n\f\r\p{Z}]
\S 곡백 λ¬Έμžκ°€ μ•„λ‹Œ λ¬Έμžμ™€ 맀치: [^\s]

4. 전후방탐색

λ•Œλ•Œλ‘œ 전후방탐색Lookaround이라고 μ•Œλ €μ§„ 후방탐색Lookbehindκ³Ό 전방탐색Lookahead은 (νŒ¨ν„΄ 맀칭을 μœ„ν•΄μ„œ μ‚¬μš©λ˜μ§€λ§Œ 맀칭된 λ¦¬μŠ€νŠΈμ—λŠ” ν¬ν•¨λ˜μ§€ μ•ŠλŠ”) λ„Œ-캑쳐링 κ·Έλ£Ή 의 νŠΉμ • μ’…λ₯˜λ“€μ΄λ‹€. 전후방탐색은 ν•˜λ‚˜μ˜ νŒ¨ν„΄μ΄ λ‹€λ₯Έ νŠΉμ • νŒ¨ν„΄ μ „μ΄λ‚˜ 후에 λ‚˜νƒ€λ‚˜λŠ” 쑰건을 가지고 μžˆμ„λ•Œ μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μš°λ¦¬κ°€ μž…λ ₯ λ¬Έμžμ—΄ $4.44 and $10.88에 λŒ€ν•΄μ„œ λ‹¬λŸ¬ λΆ€ν˜Έ $이후에 λ‚˜μ˜€λŠ” λͺ¨λ“  숫자λ₯Ό λ§€μΉ­μ‹œν‚€κ³  μ‹Άλ‹€κ³  ν•˜μž. μ΄λ•Œ μ •κ·œ ν‘œν˜„μ‹ (?<=\$)[0-9\.]*λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. 이 μ •κ·œ ν‘œν˜„μ‹μ€ $ 문자 뒀에 λ‚˜μ˜€λŠ” 문자 .을 ν¬ν•¨ν•œ λͺ¨λ“  숫자 문자λ₯Ό μ˜λ―Έν•œλ‹€. λ‹€μŒμ€ μ •κ·œ ν‘œν˜„μ‹μ—μ„œ μ‚¬μš©λ˜λŠ” 전후방탐색듀이닀.

λΆ€ν˜Έ μ„€λͺ…
?= κΈμ •ν˜• 전방탐색
?! λΆ€μ •ν˜• 전방탐색
?<= κΈμ •ν˜• 후방탐색
?<! λΆ€μ •ν˜• 후방탐색

4.1 κΈμ •ν˜• 전방탐색

κΈμ •ν˜• μ „λ°©νƒμƒ‰λŠ” ν‘œν˜„μ‹μ˜ 첫 뢀뢄뒀에 전방탐색 ν‘œν˜„μ‹μ΄ 뒀따라 λ‚˜μ˜€λŠ”μ§€ ν™•μΈν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 맀칭의 결과값은 ν‘œν˜„μ‹μ˜ 첫 λΆ€λΆ„κ³Ό 맀칭된 ν…μŠ€νŠΈλ§Œμ΄ ν¬ν•¨λœλ‹€. κΈμ •ν˜• 전방탐색λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ΄„ν˜Έκ°€ μ‚¬μš©λœλ‹€. 이 κ΄„ν˜Έ μ•ˆμ—μ„œ, λ¬ΌμŒν‘œ λΆ€ν˜Έ ?와 λ“±ν˜Έ =κ°€ λ‹€μŒκ³Ό 같이 μ‚¬μš©λœλ‹€: (?=...). 전방탐색 ν‘œν˜„μ‹μ€ κ΄„ν˜Έ λ‚΄λΆ€μ˜ λ“±ν˜Έ = λΆ€ν˜Έ 뒀에 μ“°λ©΄λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ [T|t]he(?=\sfat)λŠ” λŒ€λ¬Έμž T ν˜Ήμ€ μ†Œλ¬Έμž t 뒀에 문자 h, 문자 eκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. κ΄„ν˜Έ μ•ˆμ—μ„œ μš°λ¦¬λŠ” μ •κ·œ ν‘œν˜„μ‹ μ—”μ§„μ—κ²Œ λ°”λ‘œ 뒀에 κ³΅λ°±λ¬Έμžμ™€ λ¬Έμžμ—΄ fat이 λ‚˜μ˜€λŠ” The λ˜λŠ” the만 λ§€μΉ˜ν•˜λ„λ‘ μ•Œλ¦¬λŠ” κΈμ •ν˜• 전방탐색λ₯Ό μ •μ˜ν•˜μ˜€λ‹€.

"[T|t]he(?=\sfat)" => The fat cat sat on the mat.

Test the regular expression

4.2 λΆ€μ •ν˜• 전방탐색

λΆ€μ •ν˜• μ „λ°©νƒμƒ‰λŠ” μž…λ ₯ λ¬Έμžμ—΄λ‘œλΆ€ν„° νŠΉμ • νŒ¨ν„΄μ΄ 뒀에 λ‚˜μ˜€μ§€ μ•ŠκΈ°λ₯Ό λ°”λΌλŠ” μƒν™©μ—μ„œ μ‚¬μš©λœλ‹€. λΆ€μ •ν˜• μ „λ°©νƒμƒ‰λŠ” μš°λ¦¬κ°€ κΈμ •ν˜• 전방탐색λ₯Ό μ •μ˜ν•˜λŠ” 방식과 λ™μΌν•˜κ²Œ μ •μ˜λœλ‹€. ν•˜μ§€λ§Œ, μœ μΌν•œ 차이점은 λ“±ν˜Έ λΆ€ν˜Έ = λŒ€μ‹  λΆ€μ • λΆ€ν˜Έ ! 문자λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 것이닀, 즉 (?!...). μ •κ·œ ν‘œν˜„μ‹ [T|t]he(?!\sfat)λ₯Ό μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž. 이 μ •κ·œ ν‘œν˜„μ‹μ€ 곡백 λ¬Έμžμ™€ fat λ¬Έμžμ—΄μ΄ μ—°μ†μœΌλ‘œ λ‚˜μ˜€μ§€ μ•ŠλŠ” λͺ¨λ“  The ν˜Ήμ€ the λ¬Έμžμ—΄κ³Ό λ§€μΉ˜λœλ‹€.

"[T|t]he(?!\sfat)" => The fat cat sat on the mat.

Test the regular expression

4.3 κΈμ •ν˜• 후방탐색

κΈμ •ν˜• ν›„λ°©νƒμƒ‰λŠ” νŠΉμ • νŒ¨ν„΄λ’€μ— λ‚˜μ˜€λŠ” λ¬Έμžμ—΄ 맀치λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄μ„œ μ‚¬μš©λœλ‹€. κΈμ •ν˜• ν›„λ°©νƒμƒ‰λŠ” (?<=...)둜 ν‘œμ‹œλœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (?<=[T|t]he\s)(fat|mat)λŠ” μž…λ ₯ λ¬Έμžμ—΄μ—μ„œ The ν˜Ήμ€ the 뒀에 곡백이 λ‚˜μ˜€κ³ , κ·Έ 뒀에 fat λ˜λŠ” mat이 λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.

Test the regular expression

4.4 λΆ€μ •ν˜• 후방탐색

λΆ€μ •ν˜• ν›„λ°©νƒμƒ‰λŠ” νŠΉμ • νŒ¨ν„΄μ΄ 뒀에 λ‚˜μ˜€μ§€ μ•ŠκΈ°λ₯Ό λ°”λΌλŠ” μƒν™©μ—μ„œ μ‚¬μš©λœλ‹€. λΆ€μ •ν˜• ν›„λ°©νƒμƒ‰λŠ” (?<!...)둜 ν‘œμ‹œλœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ (?<!(T|t)he\s)(cat)은 μ•žμ— The ν˜Ήμ€ the κ°€ μœ„μΉ˜ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  cat λ¬Έμžμ—΄μ„ μ˜λ―Έν•œλ‹€.

"(?<![T|t]he\s)(cat)" => The cat sat on cat.

Test the regular expression

5. ν”Œλž˜κ·Έ

ν”Œλž˜κ·ΈλŠ” μ •κ·œν‘œν˜„μ‹μ˜ 좜λ ₯값을 μˆ˜μ •ν•˜κΈ° λ•Œλ¬Έμ— μˆ˜μ •μž(modifier)라고도 λΆˆλ¦°λ‹€. μ΄λŸ¬ν•œ ν”Œλž˜κ·Έλ“€μ€ μ–΄λ–€ μˆœμ„œ ν˜Ήμ€ μ‘°ν•©μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° μ •κ·œ ν‘œν˜„μ‹μ˜ 일뢀뢄이닀.

ν”Œλž˜κ·Έ μ„€λͺ…
i λŒ€μ†Œλ¬Έμž κ΅¬λΆ„μ—†μŒ: 맀칭이 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •.
g 전체 검색: μž…λ ₯ λ¬Έμžμ—΄ 전체λ₯Ό λŒ€μƒμœΌλ‘œ νŒ¨ν„΄μ„ 검색.
m λ©€ν‹° 라인: μ•΅ν„° 메타 λ¬Έμžκ°€ 각 μ€„λ§ˆλ‹€ λ™μž‘ν•˜λ„λ‘ μ„€μ •.

5.1 λŒ€μ†Œλ¬Έμž κ΅¬λΆ„μ—†μŒ

μˆ˜μ •μž iλŠ” λŒ€μ†Œλ¬Έμž κ΅¬λΆ„μ—†λŠ” 맀칭을 μˆ˜ν–‰ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ /The/giλŠ” λŒ€λ¬Έμž T, μ†Œλ¬Έμž h, μ†Œλ¬Έμž eκ°€ μ°¨λ‘€λ‘œ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. μ—¬κΈ°μ„œ μ •κ·œ ν‘œν˜„μ‹ λ§ˆμ§€λ§‰μ— μžˆλŠ” i ν”Œλž˜κ·Έκ°€ μ •κ·œ ν‘œν˜„μ‹ μ—”μ§„μ—κ²Œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šλ„λ‘ μ•Œλ €μ€€λ‹€. g ν”Œλž˜κ·ΈλŠ” 전체 μž…λ ₯ λ¬Έμžμ—΄ λ‚΄λΆ€μ—μ„œ νŒ¨ν„΄μ„ κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ μ„€μ •λ˜μ—ˆλ‹€.

"The" => The fat cat sat on the mat.

Test the regular expression

"/The/gi" => The fat cat sat on the mat.

Test the regular expression

5.2 전체 검색

μˆ˜μ •μž gλŠ” 첫번째 맀칭후에 λ©ˆμΆ”μ§€ μ•Šκ³  κ³„μ†ν•΄μ„œ λͺ¨λ“  맀칭을 κ²€μƒ‰ν•˜λŠ” 전체 검색을 μˆ˜ν–‰ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ /.(at)/gλŠ” κ°œν–‰μ„ μ œμ™Έν•œ λ¬Έμžκ°€ λ‚˜μ˜€κ³ , κ·Έ 뒀에 μ†Œλ¬Έμž a, μ†Œλ¬Έμž tκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. μ—¬κΈ°μ—μ„œ g ν”Œλž˜κ·Έλ₯Ό μ •κ·œ ν‘œν˜„μ‹μ˜ λ§ˆμ§€λ§‰μ— μ„€μ •ν–ˆκΈ° λ•Œλ¬Έμ—, 이 νŒ¨ν„΄μ€ μž…λ ₯ λ¬Έμžμ—΄ μ „μ²΄μ—μ„œ λ‚˜νƒ€λ‚˜λŠ” λͺ¨λ“  νŒ¨ν„΄μ„ μ°Ύμ•„λ‚Έλ‹€.

"/.(at)/" => The fat cat sat on the mat.

Test the regular expression

"/.(at)/g" => The fat cat sat on the mat.

Test the regular expression

5.3 λ©€ν‹° 라인

μˆ˜μ •μž m은 λ©€ν‹° 라인 맀치λ₯Ό μˆ˜ν–‰ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 이전에 이야기 ν–ˆλ˜ κ²ƒμ²˜λŸΌ, 액컀 (^, $)λŠ” νŒ¨ν„΄μ˜ μ‹œμž‘κ³Ό 끝을 ν™•μΈν•˜λŠ”λ° μ‚¬μš©λœλ‹€. ν•˜μ§€λ§Œ λ§Œμ•½ μš°λ¦¬κ°€ 각 λΌμΈλ§ˆλ‹€ 이 액컀가 λ™μž‘ν•˜κ²Œν•˜κ³  μ‹ΆμœΌλ©΄ m ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜λ©΄λœλ‹€. 예λ₯Ό λ“€μ–΄, μ •κ·œ ν‘œν˜„μ‹ /at(.)?$/gm은 μ†Œλ¬Έμž a와 μ†Œλ¬Έμž tκ°€ μ°¨λ‘€λ‘œ λ‚˜μ˜€κ³ , μ„ νƒμ μœΌλ‘œ κ°œν–‰μ„ μ œμ™Έν•œ λ¬Έμžκ°€ λ‚˜μ˜€λŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€. μ—¬κΈ°μ„œ ν”Œλž˜κ·Έ m으둜 μΈν•΄μ„œ μ •κ·œ ν‘œν˜„μ‹ 엔진은 μž…λ ₯ λ¬Έμžμ—΄μ˜ 각 라인에 λŒ€ν•΄μ„œ ν•΄λ‹Ή νŒ¨ν„΄μ„ λ§€μΉ­ν•˜κ²Œ λœλ‹€.

"/.at(.)?$/" => The fat
                cat sat
                on the mat.

Test the regular expression

"/.at(.)?$/gm" => The fat
                  cat sat
                  on the mat.

Test the regular expression

6. νƒμš•μ  vs 게으λ₯Έ 맀칭

기본적으둜 μ •κ·œ ν‘œν˜„μ‹μ€ νƒμš•μ (greedy) 맀칭을 μˆ˜ν–‰ν•˜λŠ”λ°, μ΄λŠ” κ°€λŠ₯ν•œ ν•œ 길게 λ§€μΉ­ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. μš°λ¦¬λŠ” ?λ₯Ό μ‚¬μš©ν•˜μ—¬ 게으λ₯Έ(lazy) 방법 맀칭할 수 있으며, κ°€λŠ₯ν•œ ν•œ 짧게 λ§€μΉ­ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

"/(.*at)/" => The fat cat sat on the mat. 

Test the regular expression

"/(.*?at)/" => The fat cat sat on the mat. 

Test the regular expression

κΈ°μ—¬ 방법

  • 이슈 λ¦¬ν¬νŒ…
  • μ½”λ“œ κ°œμ„ ν•΄μ„œ ν’€ λ¦¬ν€˜μŠ€νŠΈ μ—΄κΈ°
  • μ†Œλ¬Έλ‚΄κΈ°
  • [email protected] λ©”μΌλ‘œ 직접 μ—°λ½ν•˜κΈ° λ˜λŠ” Twitter URL

λΌμ΄μ„ΌμŠ€

MIT Β© Zeeshan Ahmad