2014-06-19 2 views
2

나는 전화 번호를 확인하는 데 사용되는 regex을 가지고 있습니다.replaceAll에 regex 사용

^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$ 

(예, 완벽하지는 않지만 실제로는 신경 쓰지 않습니다.) 나는 전화 번호를 다른 문자열로 바꾸기 위해 단지 이것을 사용하고 있습니다. 예를 들어, ###은 민감한 정보를 제거합니다. 그래서 거짓 긍정은 괜찮습니다.

검색하는 문자열이 전화 번호 일 때 작동합니다.

String PHONE_PATTERN = "^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$"; 
String phone = "123-123-1234"; 
System.out.println(s.replaceAll(PHONE_PATTERN, "###")); //prints '###' 

을하지만 주변 텍스트와 함께 작동하지 않습니다 :이 작동

String PHONE_PATTERN = "^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$"; 
String phone = "some other text 123-123-1234"; 
System.out.println(s.replaceAll(PHONE_PATTERN, "###")); 

으로 작동하지 않는, 나는 텍스트가 변경되지 않고 인쇄 의미한다. 두 번째 예제 인쇄

some other text ### 
+1

이런 어머니. – asteri

+0

정규식을 만들 때 어떻게 자동으로'^'와'&'* 자동 *으로 끝나게 되었습니까? 내가 정규 표현식을 작성할 때, 나는 그 중 하나가 거기에 있어야하는지에 대해 적극적으로 생각해야한다. * "문자열/줄의 시작 부분에서만 일치시켜야 하는가?"* – ADTC

+0

@ADTC 그것은 정규식에 온다. 나는이 사이트에서 내가 발견 한 것을 정리하고 있었다. http://www.zparacha.com/validate-email-ssn-phone-number-using-java-regular-expression/ – jlars62

답변

6

이 표현식의 시작과 끝에서 ^$를 제거 너무 일이를 얻기 위해 무엇을

나는 내 정규식 변경해야합니다. 이러한 문자는 String의 시작과 끝과 일치하지만 전화 번호가 String의 유일한 콘텐츠가 아니길 바래야하므로 제거해야합니다.

4

당신은 당신이의 마지막 문자까지 문자열의 첫 번째 문자의 전체 문자열을 일치하고 설정이 모두 갖는, 문자열의 시작^ 및 문자열의 $ 앵커를 제거해야 끈. ^

  • 는 패턴이 문자열의 첫번째 문자을 시작하는 문자열 일치해야합니다 규정하고있다.
  • $은 패턴이 문자열의 마지막 문자로 끝나는 으로 끝나는과 일치해야한다고 규정합니다.

당신이 앵커를 사용해야하는 경우에 하나 개 끝 또는 다른 에있는 패턴을 검색하려면.

5
대신 앵커 ^

$ 사용 \b (워드 경계) : 정규 표현식, 배트맨의

String PHONE_PATTERN = "\\b\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})\\b";