Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
生徒
「Kotlinで、文字列の中から特定の文字や言葉を探したり、置き換えたりする方法ってありますか?」
先生
「はい、Kotlinでは正規表現(せいきひょうげん)というしくみを使って、文字列の中身を柔軟に操作することができますよ。」
生徒
「正規表現ってなんだか難しそうです……」
先生
「最初は少しとっつきにくいかもしれませんが、Kotlinでは簡単に使えるようになっているので、基本からやさしく説明しますね!」
1. 正規表現とは?Kotlinでも使える文字列検索の便利なしくみ
正規表現(せいきひょうげん、英語ではRegex=Regular Expression)とは、文字列の中で特定のパターンを見つけたり置き換えたりできる方法です。
たとえば、「数字だけ探したい」「メールアドレスの形式を確認したい」「特定の単語をすべて置き換えたい」など、ふつうの検索ではできないことができます。
Kotlinでは、Regexクラスを使って正規表現を利用します。次の章から使い方を見ていきましょう。
2. Regexクラスの基本的な使い方(検索)
まずは、文字列の中に特定のパターンが含まれているかどうかを調べる方法です。
fun main() {
val text = "abc123xyz"
val regex = Regex("[0-9]+")
val found = regex.containsMatchIn(text)
println("数字が含まれている? $found")
}
実行結果:
数字が含まれている? true
[0-9]は「0から9までの数字」、+は「1文字以上」を意味します。つまり「数字が1つ以上あるか?」という検索です。
3. findメソッドで実際に一致した文字列を取り出す
単に「あるかどうか」だけでなく、実際に見つかった文字を取り出すにはfindメソッドを使います。
fun main() {
val text = "ユーザーID: user_456"
val regex = Regex("[a-zA-Z0-9_]+")
val result = regex.find(text)
println("見つけた文字列: ${result?.value}")
}
実行結果:
見つけた文字列: user_456
find()は最初に見つかった文字列だけを取り出します。?.valueは「見つかっていれば値を表示する」という意味の書き方です。
4. 正規表現で文字列を置き換えるreplaceの使い方
正規表現は、文字列の一部を置き換えるときにも使えます。Kotlinではreplace()メソッドとRegexを組み合わせて使います。
fun main() {
val input = "電話番号: 080-1234-5678"
val regex = Regex("[0-9]{2,4}-[0-9]{2,4}-[0-9]{4}")
val masked = input.replace(regex, "XXX-XXXX-XXXX")
println(masked)
}
実行結果:
電話番号: XXX-XXXX-XXXX
[0-9]{2,4}は「2〜4桁の数字」を意味し、-でつながった3つの数字の組み合わせを見つけて、まとめて置き換えています。
5. 複数の一致をすべて取り出すfindAll
findAll()メソッドを使うと、文字列の中にあるすべての一致を取り出すことができます。
fun main() {
val text = "apple, banana, orange123"
val regex = Regex("[a-zA-Z]+")
val results = regex.findAll(text)
for (match in results) {
println(match.value)
}
}
実行結果:
apple
banana
orange
findAllはすべての一致を取り出せるので、リストなどにまとめて処理するのに便利です。
6. よく使う正規表現のパターン例
Kotlinの文字列処理で役立つ正規表現の例をいくつか紹介します。
[0-9]:数字[a-z]:小文字アルファベット[A-Z]:大文字アルファベット[a-zA-Z]:英字すべて\\d:数字([0-9]と同じ)\\w:英数字とアンダースコア\\s:空白.+:1文字以上のなんでもOK
パターンをうまく組み合わせれば、複雑なルールのチェックや文字列の抽出も可能になります。
7. Kotlinで正規表現を使うときの注意点
Kotlinで正規表現を使う際には、次のような点に気をつけましょう。
- エスケープ文字(
\\など)はKotlinの文字列内で2重になることがある - 正規表現の文法はシンプルに始めるのがコツ
- 大文字小文字を区別せずに検索したいときは、
Regex(pattern, RegexOption.IGNORE_CASE)と書く
最初は慣れが必要ですが、実用的な場面が多いので少しずつ使ってみましょう。