Ja.
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 */
}
Sie könnten auch containsMatchIn
verwenden, wenn das Ihren Bedürfnissen entspricht besser als matches
.
Erläuterung:
Der Testausdruck einer when
Anweisung ist optional. Wenn kein Testausdruck enthalten ist, funktioniert die when
-Anweisung wie eine if-else if
-Kette, wobei die whenCondition
von jedem whenEntry
unabhängig zu einem booleschen Wert ausgewertet werden soll.
EDIT:
Also dachte ich über sie für eine Weile, und ich kam mit einem anderen Ansatz auf, die näher sein könnte, was Sie wollen.
import kotlin.text.regex
when (RegexWhenArgument(uri)) {
Regex(/* pattern */) -> /* do stuff */
Regex(/* pattern */) -> /* do stuff */
/* etc */
}
Wo RegexWhenArgument
minimal wie folgt definiert ist:
class RegexWhenArgument (val whenArgument: CharSequence) {
operator fun equals(whenEntry: Regex) = whenEntry.matches(whenArgument)
override operator fun equals(whenEntry: Any?) = (whenArgument == whenEntry)
}
Dieser Ansatz lässt Sie so nah wie möglich an das "Argument-ful" when
Ausdruck Syntax. Ich denke, es ist so gestrafft und lesbar wie es sein kann (vorausgesetzt, dass Sie die Klasse RegexWhenArgument
woanders definieren).
Dieser Ansatz nutzt etwas ähnliches wie die Besucher-Entwurfsmuster in Kombination mit Kotlin des Bedieners neu zu definieren, was eine Überlastung zwischen einem when
Argumente Ausdruck und einem whenEntry
eine „Übereinstimmung“ darstellt. Wenn Sie wirklich wollten, könnten Sie diesen Ansatz vielleicht einen Schritt weiterführen und RegexWhenArgument
in einen allgemeinen Zweck WhenArgument
und WhenArgumentDecorator
generalisieren, mit dem Sie benutzerdefinierte "Übereinstimmungs" -Kriterien in einem when
Ausdruck für jede Art von Typ angeben können, nicht nur Regex .
1. Es gibt keinen Platzhalter in "/ article/get /", also stimmt es nur mit sich selbst überein, was es schwierig macht, Ihre Frage zu verstehen. (d. h. welche Art von URI-Übereinstimmung möchten Sie wirklich/brauchen?) 2. Das Setzen von Verben wie "get" in RESTful-APIs ist normalerweise verpönt; Die HTTP-Methoden sind die Verben und Ressourcen sollten unabhängig vom Verb mit der gleichen Adresse referenzierbar sein. 3. Haben Sie darüber nachgedacht, ein RESTful-Framework mit integriertem Routing zu verwenden? z.B. Jersey. – mfulton26