.: 모든 문자와 매칭 (단일 문자)
*: 0개 이상의 앞 문자가 반복될 수 있음
+: 1개 이상의 앞 문자가 반복될 수 있음
?: 0개 또는 1개의 앞 문자가 있을 수 있음
^: 문자열의 시작을 의미
$: 문자열의 끝을 의미
[]: 문자 클래스, 내부의 문자 중 하나와 매칭
예: [abc]는 'a', 'b', 'c' 중 하나와 매칭
|: OR (또는) 연산자
예: a|b는 'a' 또는 'b'와 매칭
\: 특수 문자를 이스케이프 처리 (메타문자 그대로 사용하려면)
\d: 숫자(0-9)와 매칭
\D: 숫자가 아닌 문자와 매칭
\s: 공백 문자(스페이스, 탭, 줄 바꿈)와 매칭
\S: 공백이 아닌 문자와 매칭
\w: 단어 문자 (알파벳, 숫자, 밑줄)
\W: 단어 문자가 아닌 것과 매칭
{n}: 정확히 n번 반복
{n,}: 최소 n번 반복
{n,m}: n번에서 m번까지 반복
1) 공백 또는 탭
"\\s+" // 하나 이상의 공백
"\\t" // 탭 문자
"\\s{2,}" // 2개 이상의 공백
"\\s+|\\t" // 하나 이상의 공백 또는 탭 문자
2) 숫자로 시작하는 문자열
"\\d+" // 하나 이상의 숫자
"\\d{3}" // 정확히 3자리 숫자
3) 문자열 시작 또는 끝
"^abc" // 'abc'로 시작하는 문자열
"xyz$" // 'xyz'로 끝나는 문자열
"^\\d+$" // 숫자만으로 이루어진 문자열 전체
4) 그룹과 OR 사용
"(apple|banana)" // 'apple' 또는 'banana'와 매칭
"(\\d{3})-(\\d{4})" // '123-4567'과 같은 형식과 매칭
1) 문자열 분리 (split)
String str = "word1 뜻1";
String[] parts = str.split("\\s{2,}"); // 2개 이상의 공백으로 분리
2) 문자열 매칭 (matches)
String str = "abc123";
boolean isMatch = str.matches("^abc\\d{3}$"); // 'abc'로 시작하고 숫자 3자리로 끝나는지 확인
3) 문자열 교체 (replaceAll)
String str = "word1\t뜻1";
String result = str.replaceAll("\\t", " "); // 탭을 공백으로 교체
String line = "593. dining room 식당";
String[] string = line.split("\\d+\\.\\s+", 2);
결론
String[] wordAndMeaning = string[1].split("\\s{2,}|\t", 2);