Ну, проблема в том, что вы должны проверить, что есть ссылка на пользователя или канал сразу после адреса YouTube,
val url: String = "https://www.youtube.com/user/aaaaaaaa"
if(url.contains("/channel/")){
//url is a channel url
}else if(url.contains("/user/")){
//url is a user url
}
Здесь я не использовал, чтобы проверить, содержит ли строка youtube.com/user/
потому что некоторые URL могут иметь youtu.be/user/
, который является действительным и официальным адресом, поэтому просто проверяя, есть ли впереди sla sh до и после идентификатора, он проверяет, что он будет работать как положено!
РЕДАКТИРОВАТЬ1:
ОП хочет решение регулярного выражения так:
val regex = Regex("""(?:youtube\.com|youtu\.be)\/(user|channel)""")
val result = regex.find("https://www.youtube.com/user/aaaaaaaa")
when(result!!.groupValues[1]){
"user" -> //code
"channel" -> //code
else -> {} //or replace {} with code
}
РЕДАКТИРОВАНИЕ2:
Вы можете использовать это выражение для получить информацию о URL
val regex = Regex("""(?:https:\/\/)*(?:www\.)*(youtube\.com|youtu\.be)\/(user|channel)\/(\w+)""")
val result = regex.find("https://www.youtube.com/user/aaaaaaaa")!!
when(result.groupValues[2]){
"user" -> //code
"channel" -> //code
else -> {} //or replace {} with code
}
println(result.groupValues[0]) //https://www.youtube.com/user/aaaaaaaa
println(result.groupValues[1]) //youtube.com
println(result.groupValues[2]) //user
println(result.groupValues[3]) //aaaaaaaa
EDIT3: Как указало OP, это не работает для символа (не словесного литерала), следовательно, вместо /w+
вы можете использовать .+
Таким образом, окончательное регулярное выражение будет
(?:https:\/\/)*(?:www\.)*(youtube\.com|youtu\.be)\/(user|channel)\/(.+)