4/25 정규표현식

박세현·2024년 5월 11일

JAVA

목록 보기
14/22
post-thumbnail

6. 정규 표현식

1) java.util.regex

① Pattern 클래스 : 정규표현식 패턴 객체를 생성

  • static compile("정규식 패턴") : Pattern 객체 생성

  • static compile("정규식 패턴", 플래그)

    • 플래그
      • Pattern.CASE_INSENSITIVE : 대소문자 구분X
        ㄴ CASE : 보통 대소문자 관련됨
      • Pattern.MULTILINE : 여러줄에 걸쳐 패턴 체크
  • Matcher matcher(CharSequence str) : 패턴을 체크



② Matcher 클래스 : 패턴의 일치 여부 체크, 일치하는 문자열 추출

  • boolean find() : 패턴에 일치 여부 체크, 다음 패턴으로 이동
  • String group() : 패턴에 일치하는 문자열 추출, 특정 그룹의 문자열 추출
  • boolean matches() : 패턴의 일치여부 체크(정확하게 맞아야함) = 해당 패턴이 문자열 처음부터 등장

예시) find()
패턴에 일치 여부 체크_true, false


예시) group()
패턴에 일치하는 문자열 추출


예시) matches()
패턴의 일치여부 체크(정확하게 맞아야함)

2) 정규표현식 패턴

[]

[]안에 문자가 한개라도 있는지

①-1 Scanner 에[] 활용하기

ㄴ 대문자는 설정안해줘서 매치 못함

ㄴ 대문자알파벳도 범위로 넣어줌

② Pattern.CASE_INSENSITIVE

ㄴ 알파벳 대소문자 상관없이

^ : 부정문자클래스

\d, \D

\d : 모든 숫자[0-9]와 같음
자바는 \\를 두번 입력해야 \으로 인식

\D : 숫자를 제외한 모든 문자 한개 [^0-9]와 같음

\w, \W

\w = [a-zA-Z0-9] 임의의 영어 단어 문자(알파벳, 숫자, 언더스코어) 한개
\W = [^a-zA-Z0-9]

\s, \S

\s : 공백문자 1개

\S : 공백문자가 아닌 문자

⑦ 패턴+, 패턴*, 패턴?

패턴+ : 패턴을 1번 이상 반복 = 패턴{1,} // 최대매치
패턴* : 패턴의 0번 이상 반복 = 패턴{0,} // 최소 매치

패턴? : 패턴이 있어도 되고 없어도 되는 패턴 = 패턴{0,1}

^

^ :
문자 클래스 안에[^...] : 부정문자 클래스 [^0-9] : 숫자가 아닌 문자
문자클래스 밖에 -> 시작하는 패턴 ^java -> java로 시작하는 패턴

⑨ Pattern.MULTILINE

Pattern.MULTILINE; 여러줄에 걸쳐 패턴 체크

⑩ $

:끝나는패턴>java: 끝나는 패턴 -> java -> java로 끝나는 패턴

\b, \B

\b : 문자 클래스 -> 백스페이스키
문자 클래스 외부 -> 단어와 단어 사이 공백

\B : 단어 와 단어 사이 공백이 없는 패턴

.

. : 줄 바꿈 문자를 제외한 문자 한개

⑬ 패턴 {반복횟수}

패턴 {반복횟수}
ex) [0-9]{4} : 숫자 4개 \d{4}

⑭ 패턴 {반복횟수,}

패턴 {반복횟수,} : 패턴의 반복횟수 이상
ex) \d{4,} -> 숫자 4개 이상

⑮ 패턴 {시작횟수, 종료횟수}

패턴 {시작횟수, 종료횟수}
ex) \d{4,5} -> 숫자 4개 이상 5개 이하

⑯ 패턴 {,종료횟수}

예시) 자바는 안됨 다른 언어에서 되는 예시
패턴 {,종료횟수} : 패턴을 종료 횟수 이하로 반복
ex) \d{,4} -> 숫자 4개 이하

예시) 핸드폰 번호


ㄴ 010-1234-1234이든 010.1234.1234이든간에 번호형식이 달라도 번호로 인식하게끔

⑰ x|y|z

단어1|단어2|단어3 : 단어1, 단어2, 단어3 중 하나라도 있으면 되는 패턴

⑱ (패턴) : 그룹핑

  • (ABC){3} : ABC 패턴이 3번 반복
  • 특정 그룹의 패턴으로 특정 그룹의 문자열을 추출
  • 이미지 태그에서 src="주소"

⑲ 전방탐색 (?=패턴), 전방 부정 탐색 (?!=패턴)

전방탐색 (?=패턴) -> 패턴 앞의 있는 패턴
ex) \w*(?=:) : 문자 앞에 있는 단어 여러개 패턴
전방 부정 탐색 (?!=패턴)
ex) \w*(?!=:) : 문자가 아닌 앞에 있는 패턴



3) String 클래스 메서드 중 정규 표현식을 지원 형식

예시)

① boolean endsWith(...)

  • 특정 문자열로 끝나는지 체크

② boolean startsWith(...)

  • 특정 문자열로 시작하는지 체크

③ indexof, lastIndexOf

indexof

  • 왼쪽 -> 오른쪽으로 검색

lastIndexOf

  • 오른쪽 -> 왼쪽으로 검색

④ isBlank, isEmpty

isBlank

  • 여백포함체크 (11버전 이후)

inEmpty

  • 여백포함x체크

⑤ join

  • static형태의 메서드

⑥ format(...)

  • 형식화한 문자열 만들 때 사용

⑦ length

  • 문자의 길이

⑧ matches

⑨ repeat

특정 문자열을 횟수만큼 반복

⑩ replace(,)

⑪ split

⑫ strip, stripLeading, stripTrailing

strip

  • trim() 과 같다
  • 양쪽 여백 제거

stripLeading

  • 앞쪽 여백 제거

stripTrailing

  • 뒤쪽 여백 제거

⑬ substring

substring(int beginIndex)

  • beginIndex 위치부터 끝가지 문자열을 짜를 때 사용


ㄴ 음수로 접근하는것은 자바에선 안되고 파이선에선 가능

substring(int beginIndex, )

  • beginIndex 위치부터 미만까지 자를 때 사용

⑭ toLowerCase, toUpperCase

toLowerCase

  • 소문자

toUpperCase

  • 대문자

⑮ trim()

  • 좌우여백제거
  • strip()과 동일

⑯ valueOf

  • 정적인 메서드

참고)
Locale : 지역화
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html

참고) 자바문서
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html



4) 자바스크립트 정규 표현식

  • /패턴/ -> 정규표현식 객체

  • 플래그

    • /패턴/i -> 대소문자 구분X(CASE_INSENTIVE)
    • /패턴/m -> 여러줄에 걸쳐 패턴 체크(MULTILINE)
    • /패턴/g -> global : 전역에 걸쳐 패턴 체크


① test(문자열) : 패턴이 일치하는지 체크

② exec(문자열) : 패턴에 일치하는 문자열을 추출

  • 커서 이동하면서 다음 패턴의 문자열을 추출
  • 더 이상 찾을 패턴이 없으면 null을 반환

<a class="..." href="..."...>
<A CLASS="..." href="..."...>

  • 대소문자구분X, 전역제 걸쳐 체크
    /패턴/ig
  • 대소문자 구분x, 전역에 걸쳐 체크, 여러줄에 걸쳐 체크
    /패턴/igm


자바문서
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Matcher.html

자바문서
문서 내 constructors항목이 없으면 직접 객체 생성x
-> 그럼 어떻게 객체를 만들지?
-> 반환값이 현재 클래스와 동일하다 애가 객체를 생성 해 준다 + 보통 static이다

profile
귤귤

0개의 댓글