2017-02-28 1 views
0

주어진 패턴과 일치하는 문자열의 텍스트를 바꾸길 원합니다. 나는 그것을하기 위해 자바 코드 아래에 썼다.replaceAll 정규식에서 b 사용

public static void main(String[] args) { 

     /* Block 1 */ 
     String s1="123 Test Testing"; 
     System.out.println(s1.replaceAll("\\bTest\\b", "<Replaced with Test Message>")); // Prints 123 <Replaced with Test Message> Testing 


     /* Block 2 */ 
     String s2="123 Test] Test]ing"; 
     System.out.println(s2.replaceAll("\\bTest\\]\\b", "<Replaced with Test Message>")); //Prints 123 Test] <Replaced with Test Message>ing 

    } 

첫 번째 블록이 예상대로 작동합니다. 그러나 두 번째 블록에서 Test]을 문자열의 시작 부분에 바꾸는 대신 Test]ing 부분을 바꿉니다.

코드 또는 정규식에 문제가 있습니까? 당신은 그것을 잘 작동보다 두 번째 블록에서 정규식을 제거해야 Test] 대신

+0

모든 올바른 (귀하의 regexps 전혀 문제가 없다, 그들은 예상대로 작동). 나는 당신이''(?

+0

@ WiktorStribiżew 코드를 업데이트했습니다. 이 코드를 사용하면 솔루션에 오류가 발생합니다. –

+0

"실패"란 무엇을 의미합니까? 제 제안은 완벽하게 작동합니다 - https://regex101.com/r/w1wXqd/1 –

답변

1

Test]ingTest]의 일치 방법. :)

System.out.println(s2.replaceAll("Test\\]", "<Replaced with Test Message>")); //Prints Test] <Replaced with Test Message>ing 

OUTPUT : 정규식에

<Replaced with Test Message> <Replaced with Test Message>ing 
+0

질문을 읽어보십시오. 문자열의 시작 부분에있는 [Test]와 일치해야합니다. 어떤 말의 일부가 아닙니다. –

3

의 \ B, 즉 w \ 단어와 단어가 아닌 \의 W 자 간의 위치 워드 경계와 일치. 귀하의 패턴에서]가 단어가 아닌 문자이기 때문에 단어 간격은 첫 번째 위치 (Test)에 다음 공백으로 존재하지 않지만 두 번째 위치 (Test] ing)에는 [] 뒤에 단어 문자 i.

당신은] 후 비 단어 경계와 일치하도록

"\\bTest\\]\\B" 

에 정규식을 변경할 수있는 제 1 시험과 일치합니다.