java.lang.String에서 정규식을 자주 사용하게 된다.
그 중 replace와 replaceAll 이 문자열을 다룰 때 많이 쓰인다. 그래서 replaceAll에서 쓰이는 정규식도 같이 정리해보려고 한다.
먼저 replace() 와 replaceAll()의 차이는 정규식을 사용할 수 있느냐 없느냐 이다.
공통점은 둘다 문자열 자체를 바꾸지 않고 변형된 새 문자열을 반환한다.
문자열 "{{2,1},{2},{2,1,3,4},{2,1,3}}" 을 2,1,2,2,1,3,4,2,1,3으로 바꾸고 싶다면 어떻게 해야 할까?
replace를 사용하면 {와 }를 직접 바꿔줘야 한다.
String s = "{{2,1},{2},{2,1,3,4},{2,1,3}}";
String s2 = s.replace("{", "").replace("}", "");
그렇지만 replaceAll은 정규식 [{}] 을 활용해 한번만 바꿔주면 된다.
String s = "{{2,1},{2},{2,1,3,4},{2,1,3}}";
String s2 = s.replaceAll("[{}]", "");
또 정규식이 쓰이는 메소드로 boolean matches(String regex), String split(String regex) 가 존재한다.
split은 해당 regex에 해당하는 문자 위치로 나누는 것이다.
String str = "{1,2,3,4,5,6}";
String[] arr = str.split("[,{}]";
라고 한다면
arr 는 아래와 같을것이다.
arr = {"","1","2","3","4","5","6",""};
(위처럼 빈문자열을 만들지 않게 하기위해 먼저 중괄호를 ""로 바꿔주는 일을 먼저 수행하는 방법도 있다.)
matches는 해당 문자가 regex와 일치하는지 참 거짓으로 나타낸다.
String email = "java@coding.com";
boolean isEmail = email.matches("[0-9a-z]+@[0-9a-z]+.[0-9a-z]{2,6}");
System.out.print(isEmail);
>> true
그렇다면 정규식은 어떻게 사용할 수 있을까?
위에서 사용한 정규식 표현을 먼저 보자면
- [a-zA-Z] 소문자와 대문자 알파벳 중 한개면 일치
- [a-z]+ 소문자 알파벳 1개 이상일때
- [a-z]{2, 6} 소문자 알파벳 2개이상 6개 이하로 나올때
- [^0-9] 숫자를 제외한 문자일때
- [a-z&&[^pq]] p와 q를 제외한 소문자 일때
- . 모든 문자
- \. 문자 dot을 의미
정규식 그룹 캡쳐는 열린 괄호를 왼쪽에서 오른쪽으로 세어서 숫자를 붙인다.
- ( (A) (B (C)) )
- (A)
- (B(C))
- (C)
경계조건 판별 조건
- ^ 행의 시작
- $ 행의 끝
더 자세하게 보고싶다면 아래 블로그를 참조해보자!
https://offbyone.tistory.com/400
자바 정규식(Regular Expression) 사용하기
앞의 글에서 문자열을 분할하고, 내용을 바꾸는 split(), replaceAll() 메소드에 대해서 알아보았는데, 정규식을 사용하는 예를 들었었습니다. 그래서 자바언어에서의 정규식에 대해서 알아보려고 합
offbyone.tistory.com
실생활에 쓰이는 정규식
https://code.tutsplus.com/tutorials/8-regular-expressions-you-should-know--net-6149
8 Regular Expressions You Should Know
Regular expressions are a language of their own. When you learn a new programming language, they're this little sub-language that makes no sense at first glance. Many times you have to read...
code.tutsplus.com
'java' 카테고리의 다른 글
java 중복 없애주는 set, 객체는? (0) | 2022.05.11 |
---|---|
java optional stream() (0) | 2022.02.03 |
제네릭 클래스 Generics, 제너릭 클래스 메서드, <T> (0) | 2021.09.13 |
[java] 이중 콜론 연산자 :: (0) | 2021.09.12 |
댓글