2014-03-07 1 views
1

정규 표현식이 어떻게 작동하는지 아직도 이해할 수 없다는 것을 언급해야합니다. 아래 코드를 살펴보십시오. 여기이 Regex는 무엇을 대체합니까?

titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " "); 

titleAndBodyContainerString이다. 그러나 공간으로 대체되는 것은 무엇입니까? 마침표? 콤마? 물음표?

+0

정규식 코치는 정규 표현식을 설명하기위한 꽤 좋은 메커니즘이 있습니다. –

답변

4

공백 또는 입력 끝을 공백으로 대체합니다.

| dot (double-escaped) 
| | look ahead non-capturing group 
| | | whitespace (double-escaped) 
| | | | or 
| | | || end of input ("$") 
\\.(?=\\s|$) 

here을 확인하십시오.

+0

",?, /, (,), - 등을 대체하지 않는다는 의미의 나의 이익들 –

+0

@GloryOfSuccess 잘 아닙니다. – Mena

0

코드에서 모든 점 (.)을 공백 ()으로 바꿉니다. 그러나 조건. 점은 공백 또는 줄 끝 부분에 있어야합니다. 예를 들어

: 그것은 공간 또는 라인의 단부를 갖는 한

alex is dead. and alive.dead 
alex is dead. 

상기 두 예에서, 그것은 단지 dead 후 도트를 교체한다.

그것은 공백 문자 다음에 도트를 대체
0

공간 \t\n\x0B\f\r 또는 end of line 또는 end of input

1

enter image description here

이미지에서 : Regexper.comhttp://www.regexper.com/#\.%28%3F%3D\s|%24%29

예 :

System.out.println("Hello. ".replaceAll("\\.(?=\\s|$)", "_")); 
System.out.println("Hello.".replaceAll("\\.(?=\\s|$)", "_")); 
System.out.println(".".replaceAll("\\.(?=\\s|$)", "_")); 
System.out.println(". ".replaceAll("\\.(?=\\s|$)", "_")); 
System.out.println(".com".replaceAll("\\.(?=\\s|$)", "_")); 
System.out.println(". Hi".replaceAll("\\.(?=\\s|$)", "_")); 

출력 i s :

Hello_ //there is a space after Hello_ 
Hello_//no space this time 
_ 
_ //again, space after _ 
.com 
_ Hi 

중요한 것은 공백 문자 또는 줄 끝 문자가 소비되지 않는 것입니다. 일치 여부를 확인하는 데만 사용되지만 바꿀 수는 없습니다. 그게 전부 왜 첫 번째 예에서, "Hello. ""Hello_ " 결과뿐 아니라 "Hello_"

0
titleAndBodyContainer = titleAndBodyContainer.replaceAll("\\.(?=\\s|$)", " "); 

이 공백이나 문자열의 끝 뒤에 점 (.)과 일치하고, 공백으로 대체합니다. 당신은뿐만 아니라 ?/()을 바꾸려면

, 당신이 뭔가를 시도 할 수 :

titleAndBodyContainer = titleAndBodyContainer.replaceAll("[\\.\\?\\/\\(\\)](?=\\s|$)", " ");