Skip to content

정규 표현식과 일치시키키

no-t edited this page Aug 29, 2016 · 1 revision

4.8 정규 표현식과 일치시키기

// src/main/scala/progscala2/patternmatching/match-regex.sc

val BookExtractorRE = """Book: title=([^,]+),\s+author=(.+)""".r     // <1>
val MagazineExtractorRE = """Magazine: title=([^,]+),\s+issue=(.+)""".r

val catalog = Seq(
  "Book: title=Programming Scala Second Edition, author=Dean Wampler",
  "Magazine: title=The New Yorker, issue=January 2014",
  "Unknown: text=Who put this here??"
)

for (item <- catalog) {
  item match {
    case BookExtractorRE(title, author) =>                           // <2>
      println(s"""Book "$title", written by $author""")
    case MagazineExtractorRE(title, issue) =>
      println(s"""Magazine "$title", issue $issue""")
    case entry => println(s"Unrecognized entry: $entry")
  }
}

1. 책과 관련된 문자열과 일치시킨다.

포획그룹 capture group 이 둘 있다. 첫번째는 제목을 잡아내고 두번째는 작가를 잡는다 r 메서드를 문자열에 대해 호출하면 정규표현식 객체(scala.util.matching.Regex 타입)을 만든다

val BookExtractorRE = """Book: title=([^,]+),\s+author=(.+)""".r     // <1>

2. 정규표현식 객체를 케이스 클래스처럼 사용

  item match {
    case BookExtractorRE(title, author) =>                           // <2>
      println(s"""Book "$title", written by $author""")
    case MagazineExtractorRE(title, issue) =>
      println(s"""Magazine "$title", issue $issue""")
    case entry => println(s"Unrecognized entry: $entry")
  }

3. 정규표현식 문자열을 정의하면서 3중 큰따옴표를 사용

1) """...\s...""" 사용

val MagazineExtractorRE = """Magazine: title=([^,]+),\s+issue=(.+)""".r

2) "...\s..." 사용

val MagazineExtractorRE = "Magazine: title=([^,]+),\\s+issue=(.+)".r

3) new Regex("""\W""") 사용

val MagazineExtractorRE = new scala.util.matching.Regex("""Magazine: title=([^,]+),\s+issue=(.+)""")

4) 정규표현식 + 인터폴레이션 사용

val matchTxt = "title"
val MagazineExtractorRE = s"""Magazine: $matchTxt=([^,]+),\\s+issue=(.+)""".r
Clone this wiki locally