Java \\ s 대 \\ 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+", "");
정규식이 \\s+
한 번에 하나 이상의 공백을 일치시키고 빈 문자열로 대체 한다는 사실로 인해 잠재적으로 대체가 적기 때문에 공백을 자르는 더 효율적인 방법이 될 것입니다 (문자열에 여러 개의 연속 공백이있을 수있는 경우) .
따라서 둘 다에서 동일한 출력을 얻더라도 다음을 사용하는 것이 좋습니다.
x.replaceAll("\\s+", "");
첫 번째 정규식은 하나의 공백 문자와 일치합니다. 두 번째 정규식은 하나 이상의 공백 문자와 마지 못해 일치합니다. 대부분의 경우이 두 정규식은 매우 유사하지만, 두 번째 경우 정규식 일치가 실패하지 않도록하는 경우 정규식이 더 많은 문자열과 일치 할 수 있다는 점을 제외하고는 매우 유사합니다. 에서 http://www.coderanch.com/t/570917/java/java/regex-difference
참고 URL : https://stackoverflow.com/questions/15625629/regex-expressions-in-java-s-vs-s
'program tip' 카테고리의 다른 글
회신 주소를 정의하는 방법은 무엇입니까? (0) | 2020.09.19 |
---|---|
"FS"/ "GS"레지스터는 무엇을위한 것입니까? (0) | 2020.09.19 |
ansible-playbook 모듈 실행에 대한 로그 / 세부 정보를 얻으려면 어떻게해야합니까? (0) | 2020.09.19 |
MemoryCache는 구성의 메모리 제한을 따르지 않습니다. (0) | 2020.09.19 |
REST-JSON을 사용한 HTTP 포스트 멀티 파트 (0) | 2020.09.19 |