programing

Java에서의 정규식 \\s vs. \\s

randomtip 2022. 9. 4. 12:41
반응형

Java에서의 정규식 \\s vs. \\s

다음 두 표현은 어떤 차이가 있나요?

x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");

첫 번째 것은 단일 공백과 일치하지만 두 번째 것은 하나 이상의 공백과 일치합니다.이들은 이른바 정규 표현식 수량화자이며, 문서에서 가져온 다음과 같은 일치를 수행합니다.

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times
X{n}    X, exactly n times
X{n,}   X, at least n times
X{n,m}  X, at least n but not more than m times

Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}?   X, exactly n times
X{n,}?  X, at least n times
X{n,m}? X, at least n but not more than m times

Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+   X, exactly n times
X{n,}+  X, at least n times
X{n,m}+ X, at least n but not more than m times

저 두 사람replaceAll콜의 결과는 항상 동일합니다.x단, 두 정규 표현은 동일하지 않다는 점에 주의해 주십시오.

  • \\s- 단일 공백 문자와 일치합니다.
  • \\s+- 하나 이상의 공백 문자의 시퀀스와 일치합니다.

이 경우 모든 것을 빈 문자열로 대체하기 때문에 차이가 없습니다(단, 사용하는 것이 좋습니다).\\s+효율성의 관점에서).빈 문자열이 아닌 문자열로 대체할 경우 두 문자열은 다르게 동작합니다.

우선 두 문장의 최종 출력은 동일하다는 것을 이해해야 합니다.즉, 주어진 문자열에서 모든 공백을 삭제합니다.

하지만x.replaceAll("\\s+", "");(문자열이 여러 개의 연속된 공간을 가질 수 있는 경우) 공간을 트리밍하는 보다 효율적인 방법이 됩니다.이는 regex가 regex를 사용하기 때문에 치환 횟수가 줄어들 가능성이 있기 때문입니다.\\s+는 한 번에1개 이상의 스페이스를 대조하여 빈 문자열로 바꿉니다.

따라서 양쪽에서 동일한 출력을 얻을 수 있지만 다음 방법을 사용하는 것이 좋습니다.

x.replaceAll("\\s+", "");

첫 번째 정규식은 공백 문자 하나와 일치합니다.두 번째 정규식은 마지못해 하나 이상의 공백 문자와 일치합니다.대부분의 경우 이 두 정규식은 매우 유사하지만 두 번째 경우 regex 조회가 실패하는 것을 방지하면 regex가 더 많은 문자열과 일치할 수 있습니다.http://www.coderanch.com/t/570917/java/java/regex-difference 에서

언급URL : https://stackoverflow.com/questions/15625629/regex-expressions-in-java-s-vs-s

반응형