๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ์–ธ์–ด/JAVA

[Java] ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉ๋ฐฉ๋ฒ• (Pattern, Matcher)

by yunamom 2022. 4. 18.
๋ฐ˜์‘ํ˜•

๐ŸŒผ ์ •๊ทœํ‘œํ˜„์‹ ์ž‘์„ฑ ๋ฐฉ๋ฒ• ๐ŸŒผ

์ •๊ทœ ํ‘œํ˜„์‹(Regular Expression) ์ด๋ž€ ํŠน์ •ํ•œ ๊ทœ์น™์„ ๊ฐ€์ง„ ๋ฌธ์ž์—ด์˜ ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๋Š” ํ˜•์‹์–ธ์–ด ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ” API java.util.regex ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœจPattern ํด๋ž˜์Šค

์ •๊ทœ ํ‘œํ˜„์‹์— ๋Œ€์ƒ ๋ฌธ์ž์—ด์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ์€ java.util.regex.Pattern ํด๋ž˜์Šค์˜ matches() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. matches() ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’์€ ์ •๊ทœํ‘œํ˜„์‹์ด๊ณ  ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๊ฐ’์€ ๊ฒ€์ฆ ๋Œ€์ƒ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. 

๊ฒ€์ฆ ํ›„ ๋Œ€์ƒ๋ฌธ์ž์—ด์ด ์ •๊ทœํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด false๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
    
            String pattern = "^[0-9]*$"; //์ˆซ์ž๋งŒ
            String val = "123456789"; //๋Œ€์ƒ๋ฌธ์ž์—ด
        
            boolean regex = Pattern.matches(pattern, val);
            System.out.println(regex);
    }
}

Pattern ํด๋ž˜์Šค ์ฃผ์š” ๋ฉ”์„œ๋“œ
compile(String regex) : ์ฃผ์–ด์ง„ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ๋ถ€ํ„ฐ ํŒจํ„ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
matcher(CharSequence input) : ๋Œ€์ƒ ๋ฌธ์ž์—ด์ด ํŒจํ„ด๊ณผ ์ผ์น˜ํ•  ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
asPredicate() : ๋ฌธ์ž์—ด์„ ์ผ์น˜์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ˆ ์–ด๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
pattern() : ์ปดํŒŒ์ผ๋œ ์ •๊ทœํ‘œํ˜„์‹์„ String ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
split(CharSequence input) : ๋ฌธ์ž์—ด์„ ์ฃผ์–ด์ง„ ์ธ์ž๊ฐ’ CharSequence ํŒจํ„ด์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Parttern ํ”Œ๋ž˜๊ทธ ๊ฐ’ ์‚ฌ์šฉ(์ƒ์ˆ˜)
Pattern.CANON_EQ : Noneํ‘œ์ค€ํ™”๋œ ๋งค์นญ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
Pattern.CASE_INSENSITIVE : ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.  
Pattern.COMMENTS : ๊ณต๋ฐฑ๊ณผ #์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์„์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. (๋ผ์ธ์˜ ๋๊นŒ์ง€).
Pattern.MULTILINE : ์ˆ˜์‹ โ€˜^โ€™ ๋Š” ๋ผ์ธ์˜ ์‹œ์ž‘๊ณผ, โ€˜$โ€™ ๋Š” ๋ผ์ธ์˜ ๋๊ณผ match ๋ฉ๋‹ˆ๋‹ค.
Pattern.DOTALL : ์ˆ˜์‹ โ€˜.โ€™๊ณผ ๋ชจ๋“  ๋ฌธ์ž์™€ match ๋˜๊ณ  โ€˜\nโ€™ ๋„ match ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
Pattern.UNICODE_CASE : ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด match ์‹œํ‚ต๋‹ˆ๋‹ค.
Pattert.UNIX_LINES : ์ˆ˜์‹ โ€˜.โ€™ ๊ณผ โ€˜^โ€™ ๋ฐ โ€˜$โ€™์˜ match์‹œ์— ํ•œ ๋ผ์ธ์˜ ๋์„ ์˜๋ฏธํ•˜๋Š” โ€˜\nโ€™๋งŒ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.


โœจMatcher ํด๋ž˜์Šค

Matcher ํด๋ž˜์Šค๋Š” ๋Œ€์ƒ ๋ฌธ์ž์—ด์˜ ํŒจํ„ด์„ ํ•ด์„ํ•˜๊ณ  ์ฃผ์–ด์ง„ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํŒ๋ณ„ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

Matcher ํด๋ž˜์Šค์˜ ์ž…๋ ฅ๊ฐ’์œผ๋กœ๋Š” CharSequence๋ผ๋Š” ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฌธ์ž ๋‹จ์œ„์˜ ๋งค์นญ ๊ธฐ๋Šฅ์„ ์ง€์› ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

Matcher๊ฐ์ฒด๋Š” Pattern๊ฐ์ฒด์˜ matcher() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
            Pattern pattern = Pattern.compile("^[a-zA-Z]*$"); //์˜๋ฌธ์ž๋งŒ
            String val = "abcdef"; //๋Œ€์ƒ๋ฌธ์ž์—ด
	
            Matcher matcher = pattern.matcher(val);
            System.out.println(matcher.find());
	}
}

Matcher ํด๋ž˜์Šค ์ฃผ์š” ๋ฉ”์„œ๋“œ
matches() : ๋Œ€์ƒ ๋ฌธ์ž์—ด๊ณผ ํŒจํ„ด์ด ์ผ์น˜ํ•  ๊ฒฝ์šฐ true ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
find() : ๋Œ€์ƒ ๋ฌธ์ž์—ด๊ณผ ํŒจํ„ด์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
find(int start) : start์œ„์น˜ ์ดํ›„๋ถ€ํ„ฐ ๋งค์นญ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
start() : ๋งค์นญ๋˜๋Š” ๋ฌธ์ž์—ด ์‹œ์ž‘์œ„์น˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
start(int group) : ์ง€์ •๋œ ๊ทธ๋ฃน์ด ๋งค์นญ๋˜๋Š” ์‹œ์ž‘์œ„์น˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
end() : ๋งค์นญ๋˜๋Š”  ๋ฌธ์ž์—ด ๋ ๋‹ค์Œ ๋ฌธ์ž์œ„์น˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
end(int group) : ์ง€์ •๋˜ ๊ทธ๋ฃน์ด ๋งค์นญ๋˜๋Š” ๋ ๋‹ค์Œ ๋ฌธ์ž์œ„์น˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
group() : ๋งค์นญ๋œ ๋ถ€๋ถ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
group(int group) : ๋งค์นญ๋œ ๋ถ€๋ถ„์ค‘ group๋ฒˆ ๊ทธ๋ฃนํ•‘ ๋งค์นญ๋ถ€๋ถ„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
groupCount() : ํŒจํ„ด๋‚ด ๊ทธ๋ฃนํ•‘ํ•œ(๊ด„ํ˜ธ์ง€์ •) ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


โœจ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

์ •๊ทœ ํ‘œํ˜„์‹์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
          String name = "ํ™๊ธธ๋™";
          String tel = "010-1234-5678";
          String email = "test@naver.com";
         
          //์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
          boolean name_check = Pattern.matches("^[๊ฐ€-ํžฃ]*$", name);
          boolean tel_check = Pattern.matches("^01(?:0|1|[6-9])-(?:\\d{3}|\\d{4})-\\d{4}$", tel);
          boolean email_check = Pattern.matches("\\w+@\\w+\\.\\w+(\\.\\w+)?", email);

          //์ถœ๋ ฅ
          System.out.println("์ด๋ฆ„ : " + name_check);
          System.out.println("์ „ํ™”๋ฒˆํ˜ธ : " + tel_check);
          System.out.println("์ด๋ฉ”์ผ : " + email_check);
    }
}

 

์ถœ์ฒ˜ : ๋งํฌ

300x250

์ฝ”๋“œ