2012-04-28 3 views
1

"hi, something"과 같이 문장의 단어를 바꿀 방법이 필요합니다. 그걸 "hello, something"으로 바꿔야합니다. str.replaceAll("hi", "hello")은 나를 "hello, somethellong"이라고합니다.영숫자가 아닌 문자로 둘러싸인 문자열을 대체 할 자바 정규식

나는 또한 다른 솔루션에서 본 str.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello")을 시도했으나 작동하지 않는 것으로 보입니다.

다른 영숫자로 둘러싸여 있지 않은 단어 만 바꾸려면 가장 좋은 방법은 무엇입니까? 단어 경계에 대한

답변

4

이 경우 단어 경계가 잘 작동해야합니다 (IMO가 더 나은 해결책입니다).

String input = "ab, abc, cab"; 
String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx"); 
System.out.println(output); //xx, abc, cab 

이 발생 다른 단어 문자가 선행 또는 따르지 "AB"를 검색 : 좀 더 일반적인 방법은 부정적 예측 및 lookbehind를 사용하는 것입니다. "\ w"는 정규식으로 바꿀 수 있습니다 (정규식 엔진은 제한없는 둘러보기를 허용하지 않으므로 실용적인 제한이 있음).

+0

아주 좋아! 1 + 나는 내가 링크 한 튜토리얼 사이트에 익숙하다고 확신합니다. –

+0

@Hovercraft : 지금 다른 탭에서 열려 있습니다 : P. 하지만 Lookahead/Lookbehind 구문을 항상 잊어 버리기 때문입니다. –

2

사용 \\b는 :

String regex = "\\bhi\\b"; 

예를 들어, 정규 표현식의 금액 일을 할 거라면

String text = "hi, something"; 
    String regex = "\\bhi\\b"; 
    String newString = text.replaceAll(regex, "hello"); 

    System.out.println(newString); 

Regular Expressions Tutorial 당신의 새로운 가장 친한 친구를합니다. 나는 그것을 너무 높게 추천 할 수 없다!

+0

나는 이것을 내 ide에 넣었고 작동하지 않는 것 같았습니다. –

+0

@ Bruce : 어떻게 작동하지 않았습니까? 더 많은 정보를 줄 수 있습니까? –

+0

코드를 잘라내어 정확히 붙여 넣으면 출력이 "안녕하세요." –

관련 문제