정규표현식 메타문자 써보기
-
문자의 범위를 의미
ex)
[a-z] : a~z의 범위를 의미
[0-9] : 1~9의 범위를 의미
[가-힣] : 가~힣의 범위를 의미
public class Main {
public static void main(String[] args) {
String pattern1 = "[a-z]";
String pattern2 = "[0-9]";
String str1 = "a1b2c3";
String str2 = "abcde";
String result1 = str1.replaceAll(pattern1, "");
System.out.println("pattern1 : " + pattern1);
System.out.println("str1 : " + str1);
System.out.println("result1 : " + result1);
System.out.println();
String result2 = str2.replaceAll(pattern2, "");
System.out.println("pattern1 : " + pattern2);
System.out.println("str1 : " + str2);
System.out.println("result1 : " + result2);
System.out.println();
}
}
* 과 +
* : 앞의 문자가 0번 이상 반복
앞의 문자가 없어도 matches()에서 true를 반환한다.
+ : 앞의 문자가 1번 이상 반복
public class Main {
public static void main(String[] args) {
String pattern1 = "a*b"; // a가 0회 이상 반복 후 b가 등장하는 패턴
String pattern2 = "a+b"; // a가 1회 아상 반복 후 b가 등장하는 패턴
String str1 = "b";
String str2 = "aab";
String str3 = "aaaab";
System.out.println("* : *앞의 문자가 0회 이상 반복 후 뒷문자가 등장\n");
boolean matches1 = str1.matches(pattern1);
System.out.println("str1 : " + str1);
System.out.println("regex : a*b" );
System.out.println("result : " + matches1);
System.out.println();
boolean matches2 = str2.matches(pattern1);
System.out.println("str2 : " + str2);
System.out.println("regex : a*b" );
System.out.println("result : " + matches2);
System.out.println();
boolean matches3 = str2.matches(pattern1);
System.out.println("str3 : " + str3);
System.out.println("regex : a*b" );
System.out.println("result : " + matches3);
System.out.println();
System.out.println("+ : +앞의 문자가 1회 이상 반복 후 뒷문자가 등장\n");
boolean matches4 = str1.matches(pattern2);
System.out.println("str1 : " + str1);
System.out.println("regex : a+b" );
System.out.println("result : " + matches4);
System.out.println();
boolean matches5 = str2.matches(pattern2);
System.out.println("str2 : " + str2);
System.out.println("regex : a+b" );
System.out.println("result : " + matches5);
System.out.println();
boolean matches6 = str2.matches(pattern2);
System.out.println("str3 : " + str3);
System.out.println("regex : a+b" );
System.out.println("result : " + matches6);
System.out.println();
}
}
?
?앞의 문자가 0회 또는 1회 나타남을 의미
public class Main {
public static void main(String[] args) {
String pattern = "a?b"; // a가 0회 또는 1회 나타남
String str1 = "b";
String str2 = "ab";
String str3 = "aab";
boolean matches1 = str1.matches(pattern);
System.out.println("str1 : " + str1);
System.out.println("pattern : a?b");
System.out.println("result : " + matches1);
System.out.println();
boolean matches2 = str2.matches(pattern);
System.out.println("str2 : " + str2);
System.out.println("pattern : a?b");
System.out.println("result : " + matches2);
System.out.println();
boolean matches3 = str3.matches(pattern);
System.out.println("str3 : " + str3);
System.out.println("pattern : a?b");
System.out.println("result : " + matches3);
System.out.println();
}
}
{n}, {n,} , {n, m}
{n} : 앞의 문자가 n번 이상만큼 반복
{n,} : 앞의 문자가 n번 이상 만큼 반복
{n, m} : 앞의 문자가 n번 이상 m번 이하만큼 반복
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String pattern1 = "a{2}b"; // a가 n회 반복
String pattern2 = "a{2}b{2}"; //a가 n회 반복 b가 n회 이상 반복
String pattern3 = "a{2,}b"; //a가 n회 이상 반복
String pattern4 = "a{2,4}"; //a가 n회 이상 m회 이하 반복
String str1 = "b";
String str2 = "ab";
String str3 = "aab";
String str4 = "aaab";
String str5 = "aab";
String str6 = "aabb";
String str7 = "aaaabb ";
String str8 = "a";
String str9 = "aaaaa";
String str10 = "aaa";
boolean matches1 = str1.matches(pattern1);
System.out.println("str1 : " + str1);
System.out.println("pattern : " + pattern1);
System.out.println("result : " + matches1);
System.out.println();
boolean matches2 = str2.matches(pattern1);
System.out.println("str2 : " + str2);
System.out.println("pattern : " + pattern1);
System.out.println("result : " + matches2);
System.out.println();
boolean matches3 = str3.matches(pattern1);
System.out.println("str3 : " + str3);
System.out.println("pattern : " + pattern1);
System.out.println("result : " + matches3);
System.out.println();
boolean matches4 = str4.matches(pattern1);
System.out.println("str4 : " + str4);
System.out.println("pattern : " + pattern1);
System.out.println("result : " + matches4);
System.out.println();
boolean matches5 = str5.matches(pattern2);
System.out.println("str5 : " + str5);
System.out.println("pattern : " + pattern2);
System.out.println("result : " + matches5);
System.out.println();
boolean matches6 = str6.matches(pattern2);
System.out.println("str6 : " + str6);
System.out.println("pattern : " + pattern2);
System.out.println("result : " + matches6);
System.out.println();
boolean matches7 = str7.matches(pattern3);
System.out.println("str7 : " + str7);
System.out.println("pattern : " + pattern3);
System.out.println("result : " + matches7);
System.out.println();
boolean matches8 = str8.matches(pattern4);
System.out.println("str8 : " + str8);
System.out.println("pattern : " + pattern4);
System.out.println("result : " + matches8);
System.out.println();
boolean matches9 = str9.matches(pattern4);
System.out.println("str9 : " + str9);
System.out.println("pattern : " + pattern4);
System.out.println("result : " + matches9);
System.out.println();
boolean matches10 = str10.matches(pattern4);
System.out.println("str10 : " + str10);
System.out.println("pattern : "+ pattern4);
System.out.println("result : " + matches10);
System.out.println();
}
}
-----------------------------------------------------------------
str1 : b
pattern : a{2}b
result : false
str2 : ab
pattern : a{2}b
result : false
str3 : aab
pattern : a{2}b
result : true
str4 : aaab
pattern : a{2}b
result : false
str5 : aab
pattern : a{2}b{2}
result : false
str6 : aabb
pattern : a{2}b{2}
result : true
str7 : aaaabb
pattern : a{2,}b
result : false
str8 : a
pattern : a{2,4}
result : false
str9 : aaaaa
pattern : a{2,4}
result : false
str10 : aaa
pattern : a{2,4}
result : true
Process finished with exit code 0
()
괄호 안에 있는 문자를 그룹화
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Hello, my name is John. I am 30 years old.";
String text2 = "Hello, my name is Jane. I am 27 years old.";
Pattern pattern = Pattern.compile("name is (\\w+)");
Matcher matcher1 = pattern.matcher(text);
Matcher matcher2 = pattern.matcher(text2);
if (matcher1.find()) {
String matchedText = matcher1.group(0);
String name = matcher1.group(1);
System.out.println("matchedText: " + matchedText);
System.out.println("name: " + name);
} else {
System.out.println("No match found.");
}
System.out.println();
if (matcher2.find()) {
String matchedText = matcher2.group(0);
String name = matcher2.group(1);
System.out.println("matchedText: " + matchedText);
System.out.println("name: " + name);
} else {
System.out.println("No match found.");
}
}
}
텍스트에서
Pattern pattern = Pattern.compile("name is (\\w+)");
(\\w+) 부분을 그룹화 하고
"name is (\\w+)"을 pattern을 만든다.
각각의 패턴과 텍스트로 matcher객체 생성
Matcher matcher1 = pattern.matcher(text);
Matcher matcher2 = pattern.matcher(text2);
입력 문자열과 패턴이 일치한다면
일치하는 첫 번째 문자열을 탐색한다.
if (matcher1.find()) {
find() 메서드가 "true"를 반환하면 group() 메서드를 사용하여
일치하는 문자열과 그룹을 가져올 수 있다.
group(0)는 matcher의 패턴과 매칭되어 그루핑된 전체 문자열을 의미하고
group(1)은 ()로 그루핑한 첫 번째로 그룹화된 문자열을 의미한다.
String matchedText = matcher2.group(0);
String name = matcher2.group(1);
System.out.println("matchedText: " + matchedText);
System.out.println("name: " + name);
\\w (word character) : 알파벳 대/소문자, 숫자, 언더스코어(_)를 포함
. 은 포함되지 않고 "name is "의 패턴으로
pattern 에는 name is (이름) 형식이 들어가 있다.
이를 패턴으로 만들어
matcher에서 text와 pattern을 비교하여
그루핑 한 부분만 출력할 수 있다.
|
OR연산자로 A|B에서 A 또는 B에 해당하는 패턴을 찾는다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "I like apples and bananas.";
Pattern pattern = Pattern.compile("apple|banana");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String matchedText = matcher.group();
System.out.println(matchedText);
}
}
}
apple 또는 banana 중에 하나에 해당하는 패턴을 만든다.
Pattern pattern = Pattern.compile("apple|banana");
text에서 패턴을 적용해 볼 matcher객체를 만든다.
Matcher matcher = pattern.matcher(text);
while문에서 matcher가 해당 패턴을 가지고 있는지
탐색하고 있으면 true를 없으면 false를 반환한다.
while (matcher.find()) {
while문에서 해당 패턴을 다 찾아 false가 될 때까지
해당 패턴을 그루핑 하여 출력한다.
String matchedText = matcher.group();
System.out.println(matchedText);
'자바 탐구' 카테고리의 다른 글
인텔리제이) FAILURE : Build failed with an exception. (0) | 2023.04.21 |
---|---|
JWT) JWT 사용해보기 (0) | 2023.04.19 |
정규표현식) 메타문자 ^ . [] 써보기 (0) | 2023.04.11 |
자바) JVM (0) | 2023.04.09 |
자바) 객체 지향 프로그래밍 (0) | 2023.04.09 |