정규표현식이란, 특정 패턴을 나타내기 위해 사용되는 일종의 언어입니다. 이를 통해 텍스트 데이터 내에서 원하는 형태의 문자열을 검색, 추출, 치환하거나 데이터의 유효성을 검사하는 등의 작업을 매우 효율적으로 수행할 수 있습니다. 다양한 프로그래밍 언어와 텍스트 편집기 등에서 널리 활용되는 강력한 도구입니다.
해당 문제는 여기에서 확인하실 수 있습니다.
// 전화번호를 찾는 정규 표현식입니다.
// 0으로 시작하고, 뒤에 1자리 또는 2자리 숫자가 오며, 선택적으로 공백 또는 하이픈(-)이 올 수 있습니다.
// 그 뒤에는 3자리 또는 4자리 숫자가 오고, 선택적으로 공백 또는 하이픈(-)이 올 수 있습니다.
// 마지막으로 3자리 또는 4자리 숫자가 옵니다.
String regex = "0\\d{1,2}[ -]?\\d{3,4}[ -]?\\d{3,4}";
// 찾을 대상 문자열입니다. 여러 전화번호와 이메일 주소가 섞여 있습니다.
String searchTarget = """
Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com""";
// Pattern 클래스를 사용하여 정규 표현식을 컴파일합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 클래스를 사용하여 대상 문자열에서 패턴과 일치하는 부분을 찾습니다.
Matcher matcher = pattern.matcher(searchTarget);
// 일치하는 전화번호를 저장할 StringBuilder 객체를 생성합니다.
StringBuilder result = new StringBuilder();
// find() 메서드를 사용하여 대상 문자열에서 정규 표현식과 일치하는 부분을 순차적으로 찾습니다.
while (matcher.find()) {
// group() 메서드는 현재 찾은 일치하는 부분(전화번호)을 반환합니다.
result.append(matcher.group()).append("\n");
}
// 찾은 전화번호들을 출력합니다.
System.out.println(result.toString().trim());
해당 문제에서 사용된 정규표현식은 다음과 같습니다.
0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}
위 표현식은 전화번호 형태의 문자열을 찾기 위한 패턴으로, 구체적으로는 아래와 같은 구조를 가집니다.
- 0: 숫자 0으로 시작해야 합니다.
- \d{1,2}: 일반적으로 지역 번호를 명시합니다. 숫자가 1자리 또는 2자리 와야 합니다.
- [ -]?: 공백 문자 또는 하이픈(-)이 0번 또는 1번 나타날 수 있습니다.
- \d{3,4}: 전화번호의 중간 부분을 명시합니다. 숫자가 3자리 또는 4자리가 와야 합니다.
- [ -]?: 또 다시 공백 문자 또는 하이픈이 0번 또는 1번 나타날 수 있습니다 \d{3,4}: 전화번호의 끝 부분을 명시합니다. 숫자가 3자리 또는 4자리 와야 합니다.