[解決済み] 正規表現を用いたScalaのグループキャプチャ
2023-07-30 09:45:02
質問
次のようなコードがあるとします。
val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).foreach(println)
私は
findAllIn
を返すだけだと思っていました。
483
を返しますが、その代わりに
two483three
. 私は
unapply
を使ってその部分だけ抽出することもできますが、文字列全体に対するパターンが必要です。
val pattern = """one.*two(\d+)three""".r
val pattern(aMatch) = string
println(aMatch) // prints 483
のクラスを使用せずに、これを実現する他の方法はありますか?
java.util
のクラスを直接使用せず、unapplyを使用せずに、これを達成する他の方法はありますか?
どのように解決するのですか?
以下は、アクセスする方法の例です。
group(1)
にアクセスする例です。
val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).matchData foreach {
m => println(m.group(1))
}
これは
"483"
(
ideone.comで見たように
).
見切り発車オプション
パターンの複雑さによっては、ルックアラウンドを使用して だけ にマッチさせることもできます。こんな感じになります。
val string = "one493two483three"
val pattern = """(?<=two)\d+(?=three)""".r
pattern.findAllIn(string).foreach(println)
また、上記は
"483"
(
ideone.comで見たように
).
参考文献
関連
-
[解決済み】Regexのオプショングループ
-
[解決済み] what meas this regex (.*1) [duplicate] (重複)
-
[解決済み] 正規表現によるIPv4アドレスの検証
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み】2つのマーカー間の部分文字列を抽出する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Regexのオプショングループ
-
[解決済み】改行を含む任意の文字にマッチする正規表現
-
[解決済み] 正規表現で複数の単語を任意の順序で並べる [重複]。
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] Regex - ハイフンはエスケープされるべきか?重複
-
[解決済み] 文字列の完全一致のための正規表現
-
[解決済み] RegexにおけるOR条件
-
[解決済み] RegExp マッチする文字列が my で始まらない
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?