정규표현식 이제 어렵지 않아요~!~
개발하면서 돌아서면 잘 까먹고 볼때마다 헷갈리는 것이 있다면,,
바로 정규표현식 (Regular Expression)입니다.
이를 도와주는 유용한 사이트들이 있지만 (ex. https://regexr.com)
그래도 여전히 헷갈리더라구요;;
감사하게도
iOS 16부터는 Regex를 사용할 수 있습니다.
WWDC 2022 > Swift Regex: Beyond the basics 내용을 기반으로
아래에서 더 자세히 알아볼게요!
Hi, WWDC숫자두개! (예를들어 Hi, WWDC22!) 를 나타내는
Regex를 여러 방법으로 만들 수 있습니다.
init(String) throws 를 사용하는 방법입니다.
(참고로 #"..."# 패턴을 사용하면 string에 escaping 문자를 따로 작성안해도 됩니다.)
// 안에 정규표현식을 써주면 컴파일러가 알아서 Regex 타입으로 바꿔줍니다.
(참고로 WWDC에서는 /.../ 패턴을 Regex literal 이라고 부릅니다.)
RegexBuilder 모듈안에는 이런 extension이 있습니다.
그래서 RegexBuilder를 import하면 RegexBuilder를 이용하여 DSL 방식으로 정규표현식을 작성할 수 있습니다.
와.. 정규표현식을 DSL 로 작성할 수 있을 거라고는 생각못했는데 좋은 아이디어인 것 같아요!
문법을 까먹었어도 코드를 바로 작성할 수 있고 이해할 수 있겠군요
한편으로는
여기 있는 것들로 정규표현식을 다 대체할 수 있을까?
복잡한 표현식은 코드가 너무 복잡해지지 않을까?
생각이 들었습니다만,,
body에 Regex literal을 바로 포함시킬 수도 있다고 합니다!! (WOW..)
예를들어 이렇게 작성했는데 너무 낯설다~ 싶으면
위처럼 친숙한 regex literal을 포함하는 식으로 바꿔도 좋다고 하네요
이제 regex로 matching 되는 문자열들을 찾는 법을 알아봅시다.
우선 구조가 이렇게 되어있어서
Regex에서 제공하는 메소드들을 사용해도 되고
Foundation에서 제공하는 메소드들을 사용해도 됩니다.
예를들어
첫번째로 matching되는 것을 찾고 싶다!! 할때
- Regex의 메소드인 firstMatch(in:) 를 사용해도 되고
- BidirectionalCollection (Int, String, Array 등이 컨펌하는 프로토콜) 에 있는 firstMatch(of:)
를 사용해도 됩니다.
참고로 Regex에서 제공하는 메소드들은 string만 받을 수 있고
WWDC 영상에서는 Foundation 메소드들을 기반으로 설명합니다.
--
그럼 몇가지 기본 기능과 WWDC에서 가장 쿨한 기능(?) 중 하나라고 말씀하시는 Capture에 대해
알아보겠습니다.
- firstMath: 첫번째로 regex와 매칭되는 문자열 리턴
- wholeMatch: 전체 문장이 모두 regex와 매칭되는 문자열 리턴
- matches: 매칭되는 모든 문자열 collection 리턴
리턴타입인 Regex.Match 은 매칭 결과를 담고 있으며
output과 range를 제공합니다.
RegexBuilder의 Capture를 사용하면 원하는 문자열을 캡쳐할 수 있습니다.
그외의 기능들은 WWDC를 참고해주세요!
- WWDC 2022 > Meet Swift Regex
- WWDC 2022 > Swift Regex: Beyond the basics