変数に格納されている正規表現と、一致するパターン(以下に表示)に応じて文字列を返すマッチング操作があります。これらの変数をArrayまたはRegexのリストに変換したいので、インデックスを付けることができ、対応するグループを取得して適切な結果を返すことができます。パターンマッチングを使用した正規表現のスカラーリスト
既存のコード:
def parseString(str : String) : String = {
val ptrn2 = """/foo/bar/find/(apple|orange)/(\w+)$""".r
val ptrn3 = """/foo/bar/(fruit|vegetable)/(banana|carrot)/(\w+)$""".r
val ptrn4 = """/foo/bar/(volume|size)/(\d+)/(\d+)/(\d+)$""".r
// more variables
val response = str match {
case ptrn2(a,b) => "/foo/bar/"+ a +"/{id}"
case ptrn3(a,b,c) => "/foo/bar/"+ a +"/" + b + "/{ref}"
case ptrn4(a,b,c,d) => "/foo/bar/"+ a +"/" + (b.toInt*c.toInt*d.toInt)
// more case statements
case _ => str
}
return response
}
私はグループを取得するための変数を渡して、特定のインデックスにアクセスするには、以下の構文を使用しようとしましたが、これは正しくありません。それのどこが悪いんだい?
val prtn : List[Regex] = List(new Regex("regex here"),
new Regex("regex2 here"),
new Regex("regex3 here"))
val response = str match {
case ptrn(0)(a,b) => "/foo/bar/"+ a +"/{id}"
case ptrn(1)(a,b,c) => "/foo/bar/"+ a +"/" + b + "/{ref}"
case ptrn(2)(a,b,c,d) => "/foo/bar/"+ a +"/" + (b.toInt*c.toInt*d.toInt)
case _ => str
}
マッチブロック内のArrays/Listを介してこれにアクセスする方法が必要です。マップが適切な結果を返した場合はさらに良いでしょう。誰もがScalaでこれを解決する方法を知っていますか?
p'が解決できない 'ので、これは、コンパイルされないでしょう。抽出子と共に使用するには、 'p'は「安定した識別子」(例えば、値への参照)でなければなりません。 –