일치하는 패턴 (아래 표시)에 따라 문자열을 반환하는 변수 및 일치 연산에 저장된 정규식이 있습니다. 이러한 변수를 Array 또는 Regex List로 변환하여 인덱싱 할 수 있으므로 해당 그룹을 가져 와서 적절한 결과를 반환 할 수 있습니다.패턴 일치가있는 정규식 스칼라 목록
기존 코드 :
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를 통해 액세스 할 수있는 방법이 있어야합니다.지도가 적절한 결과를 반환하면 더 좋을 것입니다. 누구든지 스칼라에서 이것을 해결하는 방법을 알고 있습니까?
이 컴파일되지 것입니다 :
여기에 하나의 잠재적 인 구현입니다. 추출기와 함께 사용하려면 'p'가 '안정된 식별자'(예 : 값 참조) 여야합니다. –