English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 정규 표현식

Scala는 scala.util.matching 패키지를 사용하여 Regex 클래스를 사용하여 정규 표현식을 지원합니다. 아래 예제는 정규 표현식을 사용하여 단어를 찾는 방법을 보여줍니다: Scala :

import scala.util.matching.Regex
object Test {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala는 Scalable이며, 멋진 언어입니다"
      
      println(pattern findFirstIn str)
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala 
$ scala Test
Some(Scala)

예제에서는 String 클래스의 r() 메서드를 사용하여 Regex 객체를 생성했습니다。

그런 다음 findFirstIn 메서드를 사용하여 첫 번째 일치 항목을 찾습니다。

모든 일치 항목을 확인하려면 findAllIn 메서드를 사용할 수 있습니다。

정규 표현식 매치 결과 문자열을 연결하는 mkString( ) 메서드를 사용할 수 있으며, 다른 모드를 설정하기 위해 파이프(|)를 사용할 수 있습니다:

import scala.util.matching.Regex
object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")  // 첫 글자는 대문자 S 또는 소문자 s일 수 있습니다
      val str = "Scala는 확장 가능하며, 멋진 언어입니다"
      
      println((pattern findAllIn str).mkString(","))   // 콤마(,)로 결과를 연결합니다
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala 
$ scala Test
Scala,scala

일치하는 텍스트를 지정된 키워드로 대체하려면, 다음과 같이 사용할 수 있습니다: replaceFirstIn( ) 첫 번째 일치 항목을 대체하는 메서드를 사용하여, 다음과 같이 사용합니다: replaceAllIn( ) 모든 일치 항목을 대체하는 메서드를, 다음 예제와 같이 사용합니다:

object Test {
   def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala는 확장 가능하며, 멋진 언어입니다"
      
      println(pattern replaceFirstIn(str, "Java"))
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala 
$ scala Test
Java는 확장 가능하며, 멋진 언어입니다

정규 표현식

Scala의 정규 표현식은 Java의 문법 규칙을 继承하며, Java는 대부분 Perl 언어의 규칙을 사용합니다.

아래 표는 일반적으로 사용되는 정규 표현식 규칙을 제공합니다:

표현식일치 규칙
^ 입력 문자열 시작 위치를 일치시킵니다.
$입력 문자열 끝 위치를 일치시킵니다.
."\r\n"를 제외한 모든 단일 문자
[...]문자 집합. 포함된 모든 문자를 매칭합니다. 예를 들어, "[abc]"는 "plain"에서 "a"를 매칭합니다.
[^...]반대 문자 집합. 포함되지 않은 모든 문자를 매칭합니다. 예를 들어, "[^abc]"는 "plain"에서 "p", "l", "i", "n"을 매칭합니다.
\\A입력 문자열 시작 위치( multi-line support is not available)
\\z문자열 끝( similar to $, but not affected by the multi-line option)
\\Z문자열 끝 또는 행 끝(다중 행 옵션에 영향을 받지 않음)
re*0번 또는 많은번 반복
re+1번 이상 반복
re?0번 또는 1번 반복
re{ n}n번 반복
re{ n,}n번 이상 반복
re{ n, m}n부터 m번 반복
a|ba 또는 b
(re)re를 매칭, 매칭된 텍스트를 자동으로 이름 지정된 그룹에 캡처합니다
(?: re)re를 매칭, 매칭된 텍스트를 캡처하지 않으며, 그룹 번호를 할당하지 않습니다
(?> re)가장자리 표현식
\\w알파벳 또는 숫자 또는 언더스코어 또는 중국어
\\W모든 비 알파벳, 비 숫자, 비 언더스코어, 비 중국어 문자
\\s모든 공백 문자, [\t\n\r\f]과 동일
\\S모든 비 공백 문자
\\d숫자, 유사하게 [0-9]
\\D모든 비 숫자 문자
\\G현재 검색 시작 위치
\\n개행 문자
\\b보통 단어 구분 위치, 하지만 문자 클래스에서 사용하면 백스페이스를 나타냅니다
\\B단어 시작 또는 끝이 아닌 위치
\\t
\\Q시작 인용 기호:\Q(a+b)*3\E 문자 "(a"를 매칭+b)*3"。
\\E종료 인용 기호:\Q(a+b)*3\E 문자 "(a"를 매칭+b)*3"。

정규 표현식 예제

예제설명
."\r\n"를 제외한 모든 단일 문자
[Rr]uby"Ruby" 또는 "ruby"
rub[ye]"ruby" 또는 "rube"
[aeiou]소문자 aeiou
[0-9]모든 숫자, 유사하게 [0123456789]
[a-z]모든 ASCII 소문자
[A-Z]모든 ASCII 대문자
[a-zA-Z0-9]숫자와 대소문자
[^aeiou]aeiou를 제외한 모든 문자
[^0-9]숫자를 제외한 모든 문자
\\d숫자, 유사하게: [0-9]
\\D비 숫자, 유사하게: [^0-9]
\\s공백, 유사하게: [ \t\r\n\f]
\\S비 공백, 유사하게: [^ \t\r\n\f]
\\w알파벳, 숫자, 언더스코어, 유사하게: [A-일치시킵니다-Za-9z0
\\W非字母,数字,下划线,类似: [^A-일치시킵니다-Za-9z0
_]ruby?
"rub"에 추가된 0 개 또는 여러 개의 y.*"rub" 또는 "ruby": y는 선택사항입니다
"rub"에 추가된 0 개 또는 여러 개의 y.+ruby 1 "rub"에 추가된
개 또는 여러 개의 숫자.3}개 또는 여러 개의 y. 3 개 또는
개 또는 여러 개의 숫자.3정확히 일치시킵니다, 3 ,}
개 또는 여러 개의 숫자.3\\d{5}, 3 일치시킵니다4 개、 5 개 또는
개의 숫자.+\\D\\d + 그룹 없음:
(\\D\\d)+/그룹: + \D\d 반복
([Rr]uby(, )?)+"Ruby"、"Ruby, ruby, ruby" 등을 일치시킵니다

상단 표에서 각 문자는 두 개의 반취리아를 사용하고 있습니다. 이는 Java와 Scala에서 문자열의 반취리아가 음의 문자로 사용되기 때문입니다. 따라서 "\"를 출력하려면 문자열에 "\\"를 사용하여 반취리아를 얻어야 합니다. 다음 예제를 참조하세요:

import scala.util.matching.Regex
object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("abl[ae]\\d+")
      val str = "ablaw is able1 and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala 
$ scala Test
able1