[SCALA] 스칼라 정규식 일치 자바 하나의 성공, 실패
SCALA스칼라 정규식 일치 자바 하나의 성공, 실패
후속 코드에서 같은 패턴은 자바 API는 스칼라 패턴 매칭을 사용하지 않을 경우 사용할 수 있지만 때와 일치합니다.
import java.util.regex.Pattern
object Main extends App {
val text = "/oAuth.html?state=abcde&code=hfjksdhfrufhjjfkdjfkds"
val statePatternString = """\/.*\?.*state=([^&\?]*)"""
val statePattern = statePatternString.r
val statePatternJ = Pattern.compile(statePatternString)
val sj = statePatternJ.matcher(text)
val sjMatch = if (sj.find()) sj.group(1) else ""
println(s"Java match $sjMatch")
val ss = statePattern.unapplySeq(text)
println(s"Scala unapplySeq $ss")
val sm = statePattern.findFirstIn(text)
println(s"Scala findFirstIn $sm")
text match {
case statePattern(s) =>
println(s"Scala matching $s")
case _ =>
println("Scala not matching")
}
}
응용 출력은 다음과 같습니다
무슨 일이 실패 스칼라 정규식 unapplySeq를 일으키는?
해결법
-
==============================
1.당신이 스칼라 패턴을 정의 할 때 자바 sj.find ()는 문자열 안에 일치 어느 곳을 찾고있는 동안, 그것은, 기본 (= 전체 문자열이 일치해야 함)에 의해 고정된다. 또한 부분 일치를 허용하도록 스칼라 정규식에 대한 .unanchored 추가 :
당신이 스칼라 패턴을 정의 할 때 자바 sj.find ()는 문자열 안에 일치 어느 곳을 찾고있는 동안, 그것은, 기본 (= 전체 문자열이 일치해야 함)에 의해 고정된다. 또한 부분 일치를 허용하도록 스칼라 정규식에 대한 .unanchored 추가 :
val statePattern = statePatternString.r.unanchored ^^^^^^^^^^^
참조 IDEONE 데모
일부 비 고정 정규식 참조 :
대체 솔루션 패턴 끝에 *.을 추가하는 것을 의미하지만, 점은 기본적으로 줄 바꿈과 일치하지 않음을 기억합니다. 솔루션은 일반적인해야하는 경우 (?들) DOTALL 수정은 반드시 잠재적 인 개행 시퀀스 전체 문자열이 일치 할 패턴의 시작 부분에 지정해야합니다.
from https://stackoverflow.com/questions/36155207/scala-regex-match-fails-java-one-suceeds by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] : 액션 구성을 구현하는 방법 (0) | 2019.11.13 |
---|---|
[SCALA] 스칼라 루비 #tap 방법 상당 [중복] (0) | 2019.11.13 |
[SCALA] List.filter에 밑줄 (0) | 2019.11.13 |
[SCALA] 스파크 데이터 세트 컬럼 내로 ADT / 밀봉 특성 계층을 인코딩 (0) | 2019.11.13 |
[SCALA] 가져 오기 TypeTag [A] 클래스에서 [A] (0) | 2019.11.13 |