81

このコードがあるとしましょう:

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 を使用せずに、これを達成する別の方法はありますか?

4

5 に答える 5

113

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 で見られるように)。

参考文献

于 2010-06-16T06:51:17.820 に答える
17

を見たいgroup(1)のですが、現在見ているgroup(0)のは、「一致した文字列全体」です。

この正規表現チュートリアルを参照してください。

于 2010-06-16T05:41:42.640 に答える