본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Java] regex 를 써보자 - 아주 기초

by 돼지왕 왕돼지 2020. 3. 1.
반응형

[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” 에 매칭하도록 한다.




반응형

댓글