iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift で正規表現

みなさん Swift で正規表現使ったことありますか?僕は、iOSアプリ開発はじめたての頃、よく分からずググりまくっていました😇 今回は、そんな少しとっつきづらい正規表現を改めてまとめることで、再理解しちゃおうぜ!という記事です

正規表現とは?

文字列のパターンを表現する表記法のこと。

e.g)

パターン ×
〇〇県 茨城県 北海道
iPhone〇〇 iPhone11 Google Pixel

どう表すの?

通常の文字(リテラル) とメタ文字(メタキャラクタ) と呼ばれる特殊な役割を持つ記号を組み合わせて表示します。

通常の文字の並びの中に、「メタキャラクタ」(metacharacter)と呼ばれる特別な意味を与えられた記号などの組み合わせを埋め込む形でパターンの特徴を記述することができる。

参照: http://e-words.jp/w/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE.html

メタ文字には下記のようなものがあります。

「.」

「.」は改行以外の1文字を許容するメタ文字です(ワイルドカード)。

...です

さむいです
あついです
newです

「*」

「*」は、直前の文字が0回以上繰り返すことを許容するメタ文字です。

釣りしたいなあ*

釣りしたいな
釣りしたいなあ
釣りしたいなあああああああああああ

「+」

「+」は、直前の文字が1回以上繰り返すことを許容するメタ文字です。

釣りしたいなあ*

釣りしたいなあ
釣りしたいなあああああああああああ

「」は、括弧内に記述された範囲と一致する文字であれば許容するメタ文字です。

[01234567890123456789]

1
9
8

また、「-」を使用して連続する範囲を表すこともできます。下記が、「+」メタ文字と組み合わせた正規表現の例になります。

[0-90-9]+円です

100円です
999999999円です

括弧内の先頭に「^」を追加することで、範囲と一致しない文字列を許容する正規表現としても扱えます。

[^0-90-9]+

寒い
Fishing

さらに詳しく知りたい方は、下記のページで丁寧にまとめられているので参照して見てください🧑‍🔧

www-creators.com

Swift で正規表現はどう書くの?

こう書きます🧑‍🔧

func isEmail(email: String) -> Bool {
    let pattern = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$"
    guard let regex = try? NSRegularExpression(pattern: pattern) else { return false }
    let checkingResults = regex.matches(in: email, range: NSRange(location: 0, length: email.count))
    return checkingResults.count > 0
}

print(isEmail(email: "yamato8010@apple.com")) // true
print(isEmail(email: "hogehoge-hoge.com")) // false

NSRegularExpression に、正規表現の文字列を渡すことで Swift で正規表現を扱えるようになります。

NSRegularExpression 公式ドキュメントにちゃんとメタ文字の情報が一覧でのっていました✨

developer.apple.com

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com