English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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|b | a 또는 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