예. 즉, 귀하의 요구에보다 나은 matches
맞는 경우
import kotlin.text.regex
val regex1 = Regex(/* pattern */)
val regex2 = Regex(/* pattern */)
/* etc */
when {
regex1.matches(uri) -> /* do stuff */
regex2.matches(uri) -> /* do stuff */
/* etc */
}
또한 containsMatchIn
를 사용할 수 있습니다.
설명 :
when
문을 시험하기위한 표현은 선택 사항입니다. 테스트 표현식이 포함되어 있지 않으면 when
문은 if-else if
체인과 같은 기능을합니다. 여기서 whenCondition
은 whenEntry
이며 각각 부울로 평가됩니다.
는 편집 :
그래서 나는 잠시 그것에 대해 생각, 나는 당신이 원하는 가까이 할 수있는 다른 접근 함께했다.
RegexWhenArgument
가 최소한으로 정의된다
import kotlin.text.regex
when (RegexWhenArgument(uri)) {
Regex(/* pattern */) -> /* do stuff */
Regex(/* pattern */) -> /* do stuff */
/* etc */
}
:
class RegexWhenArgument (val whenArgument: CharSequence) {
operator fun equals(whenEntry: Regex) = whenEntry.matches(whenArgument)
override operator fun equals(whenEntry: Any?) = (whenArgument == whenEntry)
}
이 방법은 당신이 "인수-FUL"when
식 구문에 가능한 한 가까이 있습니다. 나는 그것이 가능할 정도로 유선형이고 읽기 쉽다고 생각한다 (여러분이 RegexWhenArgument
클래스를 다른 곳에서 정의한다고 가정 할 때).
이 접근법은 Kotlin의 연산자 오버로딩과 함께 방문객 디자인 패턴과 비슷한 것을 사용하여 when
표현식 인수와 whenEntry
사이의 "일치"를 재정의합니다. 정말로 원한다면이 접근법을 한 걸음 더 나아가서 RegexWhenArgument
을 일반 용도 WhenArgument
및 WhenArgumentDecorator
으로 생성하여 정규식뿐만 아니라 when
표현식에서 사용자 정의 "일치"조건을 지정할 수 있다고 가정합니다. .
1. "/ article/get /"에는 와일드 카드가 없으므로 자신 만 일치하므로 질문을 이해하기가 어렵습니다. (즉, 어떤 종류의 URI 일치가 실제로 원하는가/필요합니까?) 2. RESTful API에 "get"과 같은 동사를 넣는 것은 일반적으로 싫은 일입니다. HTTP 메소드는 동사이며 자원은 동사에 관계없이 동일한 주소로 참조 가능해야합니다. 3. 라우팅이 내장 된 RESTful 프레임 워크를 사용하는 것이 고려 되었습니까? 예 : 저지. – mfulton26