본문 바로가기
java

[String] replace, replaceAll과 정규식

by socialcomputer 2021. 11. 17.
반응형

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

 

반응형

댓글