4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwiftAdvent Calendar 2023

Day 12

[Swift Regex] 正規表現で マッチ・検索・置換 など

Posted at

Swiftの正規表現について調べました。
旧式の NSRegularExpression を使う方法もありますが、今回は iOS 16.0 から使用可能な Swift Regex を使った方法についてまとめます。

マッチするか

文字列やRegexの wholeMatch(of:) メソッドを呼び出します。

let text = "18時30分"
let regex = /\d+時\d+分/

if let match = text.wholeMatch(of: regex) {
    print(match.0)
} else {
    print("マッチしなかった")
}
// [出力]
// 18時30分
マッチ に関する主要なメソッドを表示
let text = "18時30分", regex = /\d+時\d+分/
var match: Regex<Substring>.Match?
var bool: Bool

// 全体がマッチするか
match = text.wholeMatch(of: regex)

// 先頭がマッチするか
bool = text.starts(with: regex)
match = text.prefixMatch(of: regex) ?? nil

検索

文字列の matches(of:) メソッドを呼び出します。

let text = "現在の時刻は18時30分、ロンドンでは9時30分です。"
let regex = /\d+時\d+分/

let matches = text.matches(of: regex)

for match in matches {
    print(match.0)
}
// [出力]
// 18時30分
// 9時30分
検索 に関する主要なメソッドを表示
let text = "18時30分", regex = /\d+時\d+分/
var matches: [Regex<Substring>.Match]
var match: Regex<Substring>.Match?
var bool: Bool

// マッチするもの全て
matches = text.matches(of: regex)

// 最初にマッチするもの
match = text.firstMatch(of: regex) ?? nil

// マッチするものを含むか
bool = text.contains(regex)

置換

文字列の replace(_:with:) メソッドを呼び出します。

var text = "現在の時刻は18時30分、ロンドンでは9時37分です。"
let regex = /\d+時\d+分/

text.replace(regex, with: "xxx")

print(text) // 現在の時刻はxxx、ロンドンではxxxです。

キャプチャした値を使って置き換えることもできます。

var text = "現在の時刻は18時30分、ロンドンでは9時37分です。"
let regex = /(\d+)時(\d+)分/

text.replace(regex) { match in
    "\(match.1):\(match.2)"
}

print(text) // 現在の時刻は18:30、ロンドンでは9:37です。
置換 や その他 の主要なメソッドを表示
let text = "18時30分", regex = /\d+時\d+分/
var string: String
var subString: String.SubSequence
var subStrings: [String.SubSequence]

// 置換
string = text.replacing(regex, with: "xxx")

// マッチした前半部分を取り除く
subString = text.trimmingPrefix(regex)

// 分割
subStrings = text.split(separator: regex)

Regexの生成について

この記事では / で囲ったリテラルで正規表現を生成しましたが、他の書き方についても別の記事でまとめたので、ぜひ読んでみてください。

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?