반응형
[Java] regex 를 써보자 - 아주 기초 |
https://regexone.com/references/java
-
자바는 regex 를 java.util.regex pkg 를 통해 제공한다.
* Matching a string
-
regex 작업을 할 때 보통 Java 는 Pattern 을 만들어 text matching 을 한다.
가장 간단한 방법은 Pattern.matches() 를 호출하는 것인데, 이는 input str 과 regexp 를 param 으로 받아서 match 를 수행한다.
boolean isMatch = Pattern.matches(String regex, String inputStr)
-
위의 방법은 추가정보를 주지 않기 때문에 보통 Pattern 을 compile 하고, Matcher 를 이용해서 matching 을 하는 것을 사용한다.
Pattern pattern = Pattern.compile(String regex) Matcher matcher = pattern.matcher(String inputStr)
-
ex)
Pattern ptrn = Pattern.compile(“([a-zA-Z]+) (\\d+)”); Matcher matcher = ptrn.matcher(“June 24”); if(matcher.matches()){ // 0, 7 System.out.println(“Match at index[“ + matcher.start() + “, “ + matcher.end() + “)”); // June 24 System.out.println(“Match : “ + matcher.group()); }
* Capturing groups
-
ex)
String pattern = “(([a-zA-Z]+) (\\d+)”; Pattern ptrn = Pattern.compile(pattern); Matcher matcher = ptrn.matcher(“June 24, August 9, Dec 12”); while (matcher.find()){ System.out.println(String.format(“Match: %s at index [%d, %d]”, matcher.group(), matcher.start(), matcher.end())); } matcher.reset(); while(matcher.find()){ System.out.println(String.format(“%d groups captured”, matcher.groupCount())); System.out.println(“Month: “ + matcher.group(1) + “, Day: “ + matcher.group(2)); System.out.println(String.format(“Month found at[%d, %d]”, matcher.start(1), matcher.end(1))); }
* Finding and replacing strings
-
String replaceStr = matcher.replaceAll(String inputStr) String replaceStr = matcher.replaceFirst(String inputStr)
-
ex)
// 첫번째 그룹과 두번째 그룹의 위치를 바꾼다. matcher.replaceAll(“$2, of $1”);
* Pattern Flags
-
Pattern 을 compile 할 때, 어떻게 input str 을 match 시킬지 추가적인 flag 를 전달할 수 있다.
-
Pattern.CASE_INSENSITIVE : 대소문자를 무시하고 matching 한다.
Pattern.MULTILINE : \n 을 가지고 있다면, start & end matcher (^, $)를 전체 str 에 대한 것이 아닌 각각의 line 기준으로 한다.
Pattern.DOTALL : dot matcher 를 new line 도 matching 하도록 한다.
Pattern.LITERAL : escape char 를 그대로 matching 하도록 한다. 예를 들어 \d 가 있다면 digit 이 아닌 실제 “ \d” 에 매칭하도록 한다.
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android 10] Q target 하는 앱의 동작 변화 (0) | 2020.03.15 |
---|---|
[android 10] 모든 앱에 해당하는 동작 변화 (0) | 2020.03.14 |
[regex] 정규식의 성능을 개선해보자. (0) | 2020.02.27 |
[android] Notification Channel ( Oreo 부터 생김 ) (0) | 2020.02.26 |
[android] 성능에 대한 미신들을 때려잡자! ( from Dev Summit 2019 ) (0) | 2019.11.16 |
댓글