brunch

Swift Regex

정규표현식 이제 어렵지 않아요~!~

by 갬성개발자

개발하면서 돌아서면 잘 까먹고 볼때마다 헷갈리는 것이 있다면,,

바로 정규표현식 (Regular Expression)입니다.


이를 도와주는 유용한 사이트들이 있지만 (ex. https://regexr.com)

그래도 여전히 헷갈리더라구요;;


감사하게도

iOS 16부터는 Regex를 사용할 수 있습니다.


스크린샷 2022-08-12 오후 3.16.03.png


WWDC 2022 > Swift Regex: Beyond the basics 내용을 기반으로

아래에서 더 자세히 알아볼게요!



[1] Regex를 만드는 여러 방법


Hi, WWDC숫자두개! (예를들어 Hi, WWDC22!) 를 나타내는

Regex를 여러 방법으로 만들 수 있습니다.



1.1 String 으로 나타내기


init(String) throws 를 사용하는 방법입니다.



(참고로 #"..."# 패턴을 사용하면 string에 escaping 문자를 따로 작성안해도 됩니다.)



1.2 / / 로 나타내기


// 안에 정규표현식을 써주면 컴파일러가 알아서 Regex 타입으로 바꿔줍니다.



(참고로 WWDC에서는 /.../ 패턴을 Regex literal 이라고 부릅니다.)



1.3 RegexBuilder 로 나타내기


RegexBuilder 모듈안에는 이런 extension이 있습니다.



그래서 RegexBuilder를 import하면 RegexBuilder를 이용하여 DSL 방식으로 정규표현식을 작성할 수 있습니다.



와.. 정규표현식을 DSL 로 작성할 수 있을 거라고는 생각못했는데 좋은 아이디어인 것 같아요!

문법을 까먹었어도 코드를 바로 작성할 수 있고 이해할 수 있겠군요



한편으로는

여기 있는 것들로 정규표현식을 다 대체할 수 있을까?

복잡한 표현식은 코드가 너무 복잡해지지 않을까?

생각이 들었습니다만,,


스크린샷 2022-08-12 오후 3.48.36.png



body에 Regex literal을 바로 포함시킬 수도 있다고 합니다!! (WOW..)


스크린샷 2022-08-12 오후 4.03.31.png


예를들어 이렇게 작성했는데 너무 낯설다~ 싶으면

위처럼 친숙한 regex literal을 포함하는 식으로 바꿔도 좋다고 하네요


스크린샷 2022-08-12 오후 4.04.55.png





[2] matching 되는 strings 찾기


이제 regex로 matching 되는 문자열들을 찾는 법을 알아봅시다.


우선 구조가 이렇게 되어있어서

Regex에서 제공하는 메소드들을 사용해도 되고

Foundation에서 제공하는 메소드들을 사용해도 됩니다.


스크린샷 2022-08-12 오후 4.39.35.png


예를들어

첫번째로 matching되는 것을 찾고 싶다!! 할때


- Regex의 메소드인 firstMatch(in:) 를 사용해도 되고

- BidirectionalCollection (Int, String, Array 등이 컨펌하는 프로토콜) 에 있는 firstMatch(of:)

를 사용해도 됩니다.



참고로 Regex에서 제공하는 메소드들은 string만 받을 수 있고

WWDC 영상에서는 Foundation 메소드들을 기반으로 설명합니다.


--

그럼 몇가지 기본 기능과 WWDC에서 가장 쿨한 기능(?) 중 하나라고 말씀하시는 Capture에 대해

알아보겠습니다.



2.1 FirstMatch / WholeMatch / Matches


- firstMath: 첫번째로 regex와 매칭되는 문자열 리턴

- wholeMatch: 전체 문장이 모두 regex와 매칭되는 문자열 리턴

- matches: 매칭되는 모든 문자열 collection 리턴



리턴타입인 Regex.Match 은 매칭 결과를 담고 있으며

output과 range를 제공합니다.



2.2 Capture


RegexBuilder의 Capture를 사용하면 원하는 문자열을 캡쳐할 수 있습니다.





그외의 기능들은 WWDC를 참고해주세요!


- WWDC 2022 > Meet Swift Regex

- WWDC 2022 > Swift Regex: Beyond the basics


sticker sticker




keyword
매거진의 이전글테크니컬 라이팅 레벨업