자바의 java.util.regex 패키지는 문자 시퀀스에서 특정 패턴을 찾기 위한 다양한 클래스를 제공합니다. 이 패키지를 활용하면 별도의 외부 라이브러리 없이도 문자열 속에 포함된 HTML 태그를 손쉽게 추출할 수 있습니다.
Pattern 클래스란?
Pattern 클래스는 정규식(regular expression)의 컴파일된 표현체입니다. 문자열과 정규식을 매칭하기 위해 이 클래스는 두 가지 핵심 메서드를 제공합니다.
compile() − 정규식을 나타내는 문자열을 매개변수로 받아 Pattern 객체를 생성하여 반환합니다.
matcher() − 검색 대상 문자열을 받아, 현재 Pattern 객체가 나타내는 패턴과 해당 문자열을 비교하는 Matcher 객체를 생성합니다.
Matcher 클래스란?
java.util.regex 패키지의 Matcher 클래스는 실제 매칭 연산을 수행하는 엔진 역할을 합니다. 매칭 결과를 확인하고 값을 가져오려면 다음 두 메서드를 사용합니다.
find() − 매칭 연산이 성공하면 true를, 실패하면 false를 반환합니다.
group() − 특정 그룹 번호를 나타내는 정수값을 받아, 매칭 과정에서 해당 그룹이 캡처한 문자열을 반환합니다.
HTML 태그 추출 절차
문자열에서 HTML 태그를 찾으려면 다음 단계를 순서대로 수행하면 됩니다.
- Pattern 클래스의
compile()메서드에 원하는 HTML 태그를 표현하는 정규식을 전달하여 Pattern 객체를 생성합니다. - Pattern 객체의
matcher()메서드를 호출해 대상 문자열과 패턴을 매칭합니다. - Matcher 클래스의
find()메서드로 매칭되는 부분이 존재하는지 확인합니다. - 매칭이 성공했다면
group()메서드로 캡처된 문자열을 꺼냅니다.
예제 코드
다음 예제는 문자열에서 <b> 태그로 감싸진 내용을 정규식으로 추출하는 프로그램입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractHtmlTag {
public static void main(String[] args) {
String str = "Welcome to <b>Tutorialspoint</b>";
// Pattern 객체 생성
Pattern pattern = Pattern.compile("<b>(\\S+)</b>");
// 문자열에서 컴파일된 패턴 매칭
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
String result = matcher.group(1);
System.out.println(result);
}
}
}
실행 결과
Tutorialspoint
코드 설명
정규식 <b>(\S+)</b>에서 괄호 ()로 묶인 부분은 캡처 그룹(capturing group)입니다. \S+는 공백이 아닌 문자가 하나 이상 연속되는 부분을 의미하므로, group(1)을 호출하면 태그 안쪽의 실제 텍스트인 "Tutorialspoint"만 깔끔하게 얻을 수 있습니다.
참고 사항
정규식은 간단한 태그 추출에는 유용하지만, 중첩된 태그나 복잡한 HTML 문서를 처리할 때는 한계가 있습니다. 실무에서 구조화된 HTML을 파싱해야 한다면 Jsoup 같은 전문 HTML 파서 라이브러리를 사용하는 것이 더 안전하고 안정적입니다. 반대로 로그 분석처럼 단순한 패턴 매칭이 필요한 경우에는 위와 같은 정규식 기반 접근이 가장 효율적입니다.