신규 아이디 추천 문제를 풀면서 정규표현식을 알고 푸는 것과 모르고 푸는 것이 천차만별의 차이가 있다는 것을 느꼈다. 그래서 정규표현식에 대해 한번 정리해두고 앞으로 알고리즘 문제를 풀 때 사용하려고 한다!!!
. [] \d \s \w
. # 모든 문자 [.] # 진짜 . [0-9] # 숫자 전체 \d 와 같음. [^0-9] # 숫자가 아닌 것들 \D [\t\n\r\f\v] # 공백 문자들 \s [^\t\n\r\f\v] # \S [a-zA-Z0-9_] # 알파벳, 숫자, _ 인 것들. \w [^a-zA-Z0-9_] # \W
* + {} ?
ab*c # b가 0번부터 무한번까지 = ab{0,}c ab+c # b가 1번부터 무한번까지 = ab{1,}c ab{2,}c # b가 2번부터 무한 ab{3,5}c ab?c = ab{0,1}c
^ $
^O O로 시작 O$ O로 끝 # \ 라는 문자를 쓰고 싶다면 \\ 두번 써야함. # 리스트 안쪽 ^와 문자열 안쪽 ^은 의미가 다름
언어별 사용법
pythonimport re re.match(정규식) re.search(정규식) re.findall(정규식) # 정규식과 맞는 모든 substring 리스트로 return re.finditer(정규식) # 정규식과 맞는 모든 subs iteratable로 return
swift
// NSRegularExpression을 이용하여 사용. do { let regex = try NSRegularExpression(pattern: regex) let results = regex.matches(in: self, range: NSRange(self.startIndex..., in: self)) return results.map { String(self[Range($0.range, in: self)!]) } } catch let error { print("invalid regex: \(error.localizedDescription)") return [] }
Python - https://wikidocs.net/4308
Swift -
https://developer.apple.com/documentation/foundation/nsregularexpression
https://eunjin3786.tistory.com/12
https://tngusmiso.tistory.com/62