🔖 INDEX
문자열 검색
1. Pattern 클래스
Pattern 클래스는 정규 표현식을 컴파일하여 패턴을 생성합니다. 정규 표현식을 사용하기 위해 먼저 Pattern 객체를 생성해야 합니다.
// 정규 표현식 패턴을 정의합니다.
String regex = "\\d+";
// 패턴을 컴파일하여 Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
2. Matcher 클래스
Matcher 클래스는 패턴을 입력 문자열에 적용하여 일치하는 부분을 찾습니다. Pattern 객체를 사용하여 Matcher 객체를 생성할 수 있습니다.
String input = "There are 12 months in a year.";
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
3. 패턴 검색
Matcher 클래스의 find() 메서드를 사용하여 입력 문자열에서 패턴이 일치하는 부분을 찾을 수 있습니다. find() 메서드는 일치하는 부분이 발견되면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
// 패턴이 일치하는지 확인하고 결과를 출력합니다.
if (matcher.find()) {
System.out.println("Match found!");
} else {
System.out.println("No match found.");
}
4. 일치하는 문자열 추출
일치하는 부분을 찾은 후, Matcher 클래스의 group() 메서드를 사용하여 일치하는 문자열을 추출할 수 있습니다.
// 패턴이 일치하는 부분을 모두 찾아 출력합니다.
while (matcher.find()) {
String matched = matcher.group();
System.out.println("Matched: " + matched);
}
// 결과:
// Matched: 12
5. 예제 코드
다음은 정규 표현식을 사용하여 문자열에서 숫자를 찾는 예제 코드입니다. 주석을 통해 각 단계를 설명하였습니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String[] args) {
// 검색할 문자열을 정의합니다.
String input = "There are 12 months in a year, and 365 days in a year.";
// 정규 표현식 패턴을 정의합니다. 여기서는 숫자를 찾는 패턴인 "\d+"를 사용합니다.
String regex = "\d+";
// 패턴을 컴파일하여 Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 패턴이 일치하는 부분을 모두 찾아 출력합니다.
while (matcher.find()) {
// group() 메소드를 사용하여 일치하는 문자열을 추출합니다.
String matched = matcher.group();
// 일치하는 문자열을 출력합니다.
System.out.println("Matched: " + matched);
}
// 결과:
// Matched: 12
// Matched: 365
}
}
문자열 치환
1. replaceAll() 메서드
문자열에서 정규 표현식에 일치하는 부분을 다른 문자열로 치환하려면 Matcher 클래스의 replaceAll() 메서드를 사용할 수 있습니다. 다음 코드는 replaceAll() 메서드를 사용하여 문자열에서 숫자를 다른 문자열로 치환하는 예입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexReplaceExample {
public static void main(String[] args) {
// 치환할 문자열을 정의합니다.
String input = "There are 12 months in a year, and 365 days in a year.";
// 정규 표현식 패턴을 정의합니다. 여기서는 숫자를 찾는 패턴인 "\\d+"를 사용합니다.
String regex = "\\d+";
// 패턴을 컴파일하여 Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 정규 표현식에 일치하는 모든 부분을 "X" 문자열로 치환합니다.
String replaced = matcher.replaceAll("X");
// 치환된 문자열을 출력합니다.
System.out.println(replaced);
// 결과: "There are X months in a year, and X days in a year."
}
}
2. replaceFirst() 메서드
Matcher 클래스의 replaceFirst() 메서드를 사용하여 정규 표현식에 일치하는 첫 번째 부분만 다른 문자열로 치환할 수 있습니다. 다음 코드는 replaceFirst() 메서드를 사용하여 문자열에서 숫자 중 첫 번째 숫자만 다른 문자열로 치환하는 예입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexReplaceFirstExample {
public static void main(String[] args) {
// 치환할 문자열을 정의합니다.
String input = "There are 12 months in a year, and 365 days in a year.";
// 정규 표현식 패턴을 정의합니다. 여기서는 숫자를 찾는 패턴인 "\\d+"를 사용합니다.
String regex = "\\d+";
// 패턴을 컴파일하여 Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 정규 표현식에 일치하는 첫 번째 부분만 "X" 문자열로 치환합니다.
String replaced = matcher.replaceFirst("X");
// 치환된 문자열을 출력합니다.
System.out.println(replaced);
// 결과: "There are X months in a year, and 365 days in a year."
}
}
문자열 추출
1. group() 메서드
정규 표현식을 사용하여 문자열에서 특정 패턴에 일치하는 부분을 추출하려면 Matcher 클래스의 group() 메서드를 사용할 수 있습니다. 다음 코드는 정규 표현식을 사용하여 문자열에서 패턴에 일치하는 부분을 추출하는 예입니다.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexGroupExample {
public static void main(String[] args) {
String input = "John Doe (johndoe@gmail.com), Jane Smith (janesmith@yahoo.com)";
String regex = "\\w+@\\w+\\.\\w{2,4}"; // 이메일 주소를 찾는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 패턴에 일치하는 이메일 주소를 추출하여 출력합니다.
while (matcher.find()) {
System.out.println("Found email: " + matcher.group());
}
// 결과: johndoe@gmail.com, janesmith@yahoo.com
}
}
문자열 검증
1. matches() 메서드
정규 표현식을 사용하여 문자열이 특정 패턴에 일치하는지 확인하려면 Matcher 클래스의 matches() 메서드를 사용할 수 있습니다. 다음 코드는 정규 표현식을 사용하여 문자열이 패턴에 일치하는지 확인하는 예입니다.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexMatchesExample {
public static void main(String[] args) {
String input = "123-45-6789";
String regex = "\\d{3}-\\d{2}-\\d{4}"; // 주민등록번호 형식을 검사하는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 문자열이 정규 표현식 패턴에 일치하는지 확인합니다.
if (matcher.matches()) {
System.out.println("Valid SSN format.");
} else {
System.out.println("Invalid SSN format.");
}
// 결과: Valid SSN format.
}
}
그룹화 및 그룹 추출
1. 정규 표현식에서 괄호를 사용한 그룹화
정규 표현식에서 괄호를 사용하여 표현식의 일부분을 그룹화할 수 있습니다. 이를 통해 추출하거나 치환할 대상을 더 구체적으로 지정할 수 있습니다. 다음 코드는 정규 표현식에서 그룹화를 사용하여 문자열에서 패턴에 일치하는 부분을 추출하는 예입니다.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexGroupingExample {
public static void main(String[] args) {
String input = "2022-04-20";
String regex = "(\\d{4})-(\\d{2})-(\\d{2})"; // 년-월-일 형식의 날짜를 그룹화하는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 패턴에 일치하는 부분의 각 그룹을 추출하여 출력합니다.
if (matcher.find()) {
System.out.println("Year: " + matcher.group(1));
System.out.println("Month: " + matcher.group(2));
System.out.println("Day: " + matcher.group(3));
}
// 결과: Year: 2022, Month: 04, Day: 20
}
}
출전 후방 탐색 (Lookaround)
1. 전방 탐색 (Lookahead) 및 후방 탐색 (Lookbehind)
정규 표현식에서 전방 탐색(lookahead) 및 후방 탐색(lookbehind)은 특정 패턴을 찾을 때 앞 또는 뒤의 문자열을 확인하고 싶을 때 사용합니다. 전방 탐색은 (?=...)로 표현하며, 후방 탐색은 (?<=...)로 표현합니다. 다음 코드는 전방 탐색과 후방 탐색을 사용하여 문자열에서 패턴을 찾는 예입니다.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexLookaroundExample {
public static void main(String[] args) {
String input = "price: 1000 won, discount: 500 won";
String regex = "\\d+(?= won)"; // "won"이라는 단어 앞에 있는 숫자를 찾는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 패턴에 일치하는 부분을 찾아 출력합니다.
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
// 결과: 1000, 500
String input2 = "USD100, EUR200, KRW300";
String regex2 = "(?<=USD)\\d+"; // "USD"라는 단어 뒤에 있는 숫자를 찾는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern2 = Pattern.compile(regex2);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher2 = pattern2.matcher(input2);
// 패턴에 일치하는 부분을 찾아 출력합니다.
if (matcher2.find()) {
System.out.println("Found: " + matcher2.group());
}
// 결과: 100
}
}
정규 표현식 플래그 사용
정규 표현식에서 플래그를 사용하면, 특정 옵션을 적용하여 패턴 매칭을 수행할 수 있습니다. 주요 플래그는 다음과 같습니다.
- CASE_INSENSITIVE (Pattern.CASE_INSENSITIVE 또는 (?i)): 대소문자를 구분하지 않고 매칭합니다.
- MULTILINE (Pattern.MULTILINE 또는 (?m)): 여러 줄에 걸쳐 패턴을 매칭합니다.
- DOTALL (Pattern.DOTALL 또는 (?s)): 줄바꿈 문자를 포함한 모든 문자를.(dot)으로 매칭합니다.
다음 코드는 정규 표현식 플래그를 사용하여 문자열에서 패턴을 찾는 예입니다.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexFlagExample {
public static void main(String[] args) {
String input = "Hello World\nhello world";
String regex = "(?i)hello"; // 대소문자를 구분하지 않는 정규 표현식
// Pattern 객체를 생성하고 플래그를 설정합니다.
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
// Matcher 객체를 생성하여 입력 문자열에서 패턴을 검색합니다.
Matcher matcher = pattern.matcher(input);
// 패턴에 일치하는 부분을 찾아 출력합니다.
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
// 결과: Hello, hello
}
}
문자열에서 특정 패턴 제거
문자열에서 특정 패턴을 제거하려면, 정규 표현식을 사용하여 해당 패턴을 찾은 후 빈 문자열로 치환합니다. 다음 코드는 정규 표현식을 사용하여 문자열에서 패턴을 제거하는 예입니다.
import java.util.regex.Pattern;
public class RegexRemoveExample {
public static void main(String[] args) {
String input = "This is a test123 string.";
String regex = "\\d+"; // 숫자를 찾는 정규 표현식
// Pattern 객체를 생성합니다.
Pattern pattern = Pattern.compile(regex);
// 입력 문자열에서 패턴에 일치하는 부분을 제거합니다.
String result = pattern.matcher(input).replaceAll("");
System.out.println("Result: " + result);
// 결과: This is a test string.
}
}
'프로그래밍 > JAVA' 카테고리의 다른 글
초보 자바 프로그래밍(42) - 주요 유니코드 인코딩 방식 (0) | 2023.05.04 |
---|---|
초보 자바 프로그래밍(41) - 문자셋과 유니코드 (0) | 2023.05.04 |
초보 자바 프로그래밍(39) - 정규표현식 (Regular Expression) (0) | 2023.05.02 |
초보 자바 프로그래밍(38) - 문자열 변환 (0) | 2023.05.02 |
초보 자바 프로그래밍(37) - 문자열과 String 클래스 (0) | 2023.05.02 |
댓글