Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift Regex Builder
Search
kumamotone
June 29, 2022
Technology
1
660
Swift Regex Builder
at Recap of WWDC22
https://mercari.connpass.com/event/248712/
2022/06/29 #wwdc_mercari
kumamotone
June 29, 2022
Tweet
Share
More Decks by kumamotone
See All by kumamotone
AIエージェントを活用したアプリ開発手法の模索
kumamotone
1
1.1k
YOUTRUSTでやった技術発信まとめ
kumamotone
0
250
Integration Test で パフォーマンス計測する
kumamotone
0
660
VSCodeから一発でProxymanを起動する
kumamotone
0
740
スワイプで閉じれる画像ビューアを作る
kumamotone
1
1k
ColorFiltered で カメラフィルタを実装する
kumamotone
1
610
SwiftUI の @State, @ObservedObject, @EnvironmentObject
kumamotone
4
1.1k
5分でわかる Kotlin Contracts
kumamotone
2
1.3k
しくみから理解するSwiftUI
kumamotone
5
2.9k
Other Decks in Technology
See All in Technology
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
380
配列に見る bash と zsh の違い
kazzpapa3
1
150
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
170
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
540
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
280
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
110
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.4k
OpenShiftでllm-dを動かそう!
jpishikawa
0
110
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
150
生成AI時代にこそ求められるSRE / SRE for Gen AI era
ymotongpoo
5
3.2k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.8k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
120
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Building an army of robots
kneath
306
46k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Designing for Performance
lara
610
70k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
66
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
Being A Developer After 40
akosma
91
590k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
99
Transcript
2022/06/29 Recap of WWDC22 @kumamo_tone Swift Regex Builder
@kumamo_tone 〜2016.03 Tsukuba Univ. Computer Science Master 2016.04〜2019.11 Software
Engineer(iOS/Android) @Yahoo! JAPAN 2019.12〜NOW Software Engineer(iOS) @merpay https://kuma.dev https://twitter.com/kumamo_tone mercariでのSlack名は @kumamon
概要 • 今秋登場予定のXcode14に組み込まれている Swift 5.7 で正規表現に関する機能が追加される ◦ 正規表現型 Regex の追加
◦ 正規表現リテラル /.../ の追加 ◦ Regex Builder DSL の追加
関連セッション • Meet the regex (22分) ◦ 概要と使い方、Unicodeの対応について • Swift
Regex: Beyond the basics (11分) ◦ 名前から上級者向け感がするが短いしそうでもない ▪ 文字列から情報を抽出する例の紹介 ▪ カスタムのパーサを作る方法 • What’s new in Swift (13分) ◦ 軽く触れているだけなのでRegexの理解は深まらない • Platforms State of the Union ◦ 開始10分ぐらいでXcodeを使ったデモ ◦ 見るとテンションが上がるので良い
Swift-evolution Regexに関連するプロポーザル • SE-0350 Regex Type and Overview
◦ Regex<Output> と Regex<Output>.Match 型の追加 • SE-0351 Regex builder DSL ◦ @resultBuilder で正規表現を組み立てることができる • SE-0354 Regex Literals ◦ 正規表現リテラル /.../ の追加 • SE-0355 Regex Syntax and Run-time Construction • SE-0357 Regex-powered string processing algorithms 直接は関連しないが関連するプロポーザル • SE-0348 buildPartialBlock for result builders (2022年6月29日現在)
正規表現 = Regular Expression 正規 表現 ^[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9] [a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,} こういうの ProTip:
WWDCのセッションの人は、 略語だからリジェックスとかじゃなくて レグエックス的な発音をしていた 簡潔で便利だが、 たまにしか書かないから 毎回調べながら書いている 人が多いと言われている
(New!) Regex リテラル let mailAddressRegex = /^[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-z A-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}/ • /…/
という形で正規表現を直接書けるようになった ◦ Perl, PHP, Ruby, JavaScript などでおなじみの形 メールアドレスにマッチする正規表現 (https://www.javadrive.jp/regex-basic/sample/index13.html )
(New!) Regex Builder • @resultBuilder(Swift5.4〜)を使って正規表現を 組み立てることができる Regex { Anchor.startOfLine OneOrMore
{ CharacterClass( .anyOf("_+-"), ("a"..."z"), ("A"..."Z"), ("0"..."9") ) } ZeroOrMore { Capture { One(.any) OneOrMore { CharacterClass( .anyOf("_+-"), ("a"..."z"), ("A"..."Z"), ("0"..."9") ZeroOrMore { CharacterClass( ("a"..."z"), ("A"..."Z"), ("0"..."9") ) } "." } } Repeat(2...) { CharacterClass( ("a"..."z"), ("A"..."Z") ) } } ) } } } "@" OneOrMore { Capture { CharacterClass( ("a"..."z"), ("A"..."Z"), ("0"..."9") ) ZeroOrMore { CharacterClass( .anyOf("-"), ("a"..."z"), ("A"..."Z"), ("0"..."9") ) } 前ページのメールアドレスにマッチする正規表現
(New!) Regex Builder • 正規表現リテラルを混ぜることもできる • 変数でまとめることができる • Foundationの機能で日付や通貨などのパースができる
個人的に良いと思った点 • 理解しやすい、再利用しやすい • コンパイル時に正しいか検証してくれる • 部分的に正規表現リテラルを使うことができるし使わなくても良い • Swift5 は
UTF-8 (https://www.swift.org/blog/utf8-string/ ) ◦ 正規表現に含めることができる • IDEのサポートがある ◦ 入力補完が効く ◦ シンタックスハイライトが効く ◦ Editor > Refactoring > Convert to Regex Builder で Regex Builder でRegex Builderに変換できる(!)
デモ • 以下の文字列から路線名を抽出するプログラムを作る 入力 参考にするページ 漢字の正規表現 https://tama-san.com/kanji-regex/ 「これは山手線ですか?」「そうです。埼京線です。」 出力 山手線
埼京線
注意点とこれから調べたいこと • 稀なケースでソース互換性が失われるため、 Swift 5.7 で正規表現リテラルを有効にするには -Xfrontend -enable-experimental-string-processing フラグが必要らしい (Swift
6 からはデフォルトで有効になる予定) • フラグに関わらず #/…/# は使えるらしい ◦ /…/ は最初と最後のスペースが無視されるが、 #/…/# は無視されないという違いがある • と思いきやXcode14 Beta2で普通に /…/ と書くといい感じに動いたりす る • と思いきやWWDCのセッションのコードをコピーしてきたらうまく動かな かったりする (2022年6月29日現在)
まとめ • Swift 5.7 で 正規表現リテラル、Regex Builder DSL などの正規表現に 関する機能が追加された
◦ デフォルトで有効になるのは Swift 6 から ◦ 静的検査が効くし、Xcodeで Regex Builder DSLに簡単に変換できてたのしい Thank you for listening!