(1) 문자열 나누기
println("12.345-6.A").split("\\\\.|-".toRegex()) // 정규식을 명시적으로 만든다.
println("12.345-6.A").split(".", "-") // 여러 구분 문자열을 지정해도 동일하다.
// [12, 345, 6, A]
- Kotlin에서는 Java의 split을 대신하여 여러가지 파라미터를 받는 split 확장 함수를 제공한다.
- 정규식을 파라미터로 받는 함수는 String이 아닌 Regex 타입의 값을 받으므로, 어느 것으로 문자열을 분리하는 지 쉽게 알 수 있다.
(2) 정규식과 3중 따옴표로 묶은 문자열
fun parsePath(path: String) {
val directory = path.substringBeforeLast("/")
val fullName = path.substringAfterLast("/")
val fileName = fullName.substringBeforeLast(".")
val extension = fullName.substringAfterLast(".")
println("Dir: $directory, name: $fileName, ext: $extension")
}
parsePath("/Users/kyungwon/kotlin-book/chapter.md")
// Dir: /Users/kyungwon/kotlin-book, name: chapter, extension: md
fun parsePath(path: String) {
val regex = """(.+)/(.+)\\.(.+)""".toRegex()
val matchResult = regex.matchEntire(path)
if(matchResult != null) {
val (directory, fileName, extension) = matchResult.destructured
println("Dir: $directory, name: $fileName, ext: $extension")
}
}
- 코틀린에서는 정규식을 사용하지 않고도 문자열을 파싱하는 것이 가능하지만 알아보기 힘든 경우가 많다.
- 다음과 같은 작업을 정규식을 활용하여 구현하는 것이 가능하다.
- 3중 따옴표 문자열에서는 역슬래시를 포함한 어떤 문자도 이스케이프할 필요가 없다.
- 해당 예제에서 사용한 정규식은 슬래시와 마침표를 기준으로 경로를 세 그룹으로 분리한다.
- 패턴 .은 임의의 문자와 매치될 수 있다.