정규 표현식 by Ruby

준비중..

정규 표현식 by Ruby

문자열 추출의 모든 것!

02 정규 표현식 기초

# 정규 표현식 기초 ## 메타문자 메타 문자(meta characters)는 특별한 의미를 갖는 문자이다. 대표적 예로 아래와 같은 것들이 있다. 이들에 대한 내용을 하나씩 살펴보자. ``` [ ] . * + { } | - ^ ? \ ( ) ... ``` ## 문자 클래스 [ ] 문자 클래스(`[ ]`)는 대괄호 사이에 들어간 문자를 찾는다. 예를들어 [aeiou]라는 표현식은 모음을 찾는 패턴으로 "a, e, i, o, u 중 한 개"라는 의미다. 아래는 Ruby를 사용한 정규식 예이다. ``` // a, b, c 중 한개라도 포함되어있는가? (가장 먼저 찾은 문자를 반환) "Do you like dogs?".match(/[abc]/) // nil "Do you like cats?".match(/[abc]/) // "c" ``` ## 범위 하이픈(`-`)을 사용하면 "두 문자 사이의 범위"를 뜻한다. ``` # 숫자를 포함하는가? "Happy New Year 2018".match(/[0-9]/) // "2" ``` ## 자주사용하는 문자 클래스 빈번하게 등장하는 메타문자는 아래와 같다. ``` // 숫자 \d // [0-9]: isDigit? \D // [^0-9]: ! isDigit? // 공백 \s // [ \t\n\r\f\v]: isWhiteSpace? \S // [^ \t\n\r\f\v] ! isWhiteSpace? // 문자 \w // [a-zA-Z0-9]: isCharacter? \W // [^a-zA-Z0-9]: ! isCharacter? ``` ## Dot: 임의의 한 글자 ``` "1aaaa 5a5 bbbb2".match(/\d.\d/) // "5a5" ``` ## 반복 ``` // + : 1 or more // * : 0 or more // ? : 0 or 1 // {3, 5} : between 3 and 5 ``` ## 시작과 끝 ``` // ^ : beginning of line "Regex are cool".match(/^\w{4}/) # => Rege // $ : end of line "Regex are cool".match(/\w{4}$/) # => cool ``` ## 캡처 그룹 특정 패턴을 묶어서 추출하는 방법. ``` // 첫 번째 그룹 추출 m = "John 31".match /\w+ (\d+)/ m[1] # => 31 ``` 이름을 지정할 수 있음 ``` m = "David 30".match /(?<name>\w+) (?<age>\d+)/ m[:age] # => "30" m[:name] # => "David" ``` ## 레퍼런스 + Mastering Ruby RegEx(http://www.rubyguides.com/2015/06/ruby-regex/)