Java

정규식 알아보기

openDeveloper 2023. 4. 28. 00:47

https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

위 문제를 풀면서 정규식으로 풀면 되겠다라는 건 생각할 수 있었지만, 정규식으로 표현할 수가 없어 검색을 하여 문제를 해결하였다. 이 참에 정규식에 대해서 자세히 알아보면 좋을 듯하여 글을 정리하여 보았다.

 

더보기

정규표현식은 다음과 같은 구성 요소로 이루어져 있습니다:

  1. 리터럴(Literal) 문자: 일반 문자들은 자신과 정확히 일치하는 문자를 찾습니다. 예를 들어, 'abc'라는 패턴은 'abc'라는 문자열과 일치합니다.
  2. 메타 문자(Meta characters): 특수 기능을 수행하기 위해 사용되는 특수 문자들입니다. 예를 들어, '.', '*', '+', '?', '^', '$', '(', ')', '[', ']', '{', '}', '|', '' 등이 있습니다.
  3. 문자 클래스(Character classes): 대괄호([]) 안에 문자를 나열하여, 그 중 한 문자와 일치하는 것을 찾습니다. 예를 들어, [abc]는 'a', 'b' 또는 'c' 중 하나와 일치합니다.
  4. 수량자(Quantifiers): 패턴이 몇 번 반복되어야 하는지를 지정하는데 사용됩니다. '*', '+', '?' 및 '{}'와 같은 메타 문자들이 수량자로 사용됩니다.
  5. 그룹화(Grouping): 소괄호(())를 사용하여 여러 문자 또는 패턴을 그룹화하고, 수량자를 적용하거나 그룹화된 내용을 참조하는데 사용됩니다.
  6. 기타 메타 문자들:
    • '^': 문자열이나 행의 시작과 일치합니다.
    • '$': 문자열이나 행의 끝과 일치합니다.
    • '|': 대체(alternation)를 나타내며, 두 패턴 중 하나와 일치합니다.
    • '.': 줄바꿈 문자를 제외한 모든 문자와 일치합니다.
  7. 탈출 문자(Escape character): 메타 문자 앞에 역슬래시()를 두어, 해당 메타 문자가 특수 기능을 수행하는 것이 아닌 문자 그대로 인식되게 합니다.

이러한 구성 요소들을 조합하여 복잡한 문자열 패턴을 만들 수 있습니다. 정규표현식을 사용하면 효율적으로 문자열 검색, 추출 및 조작 작업을 수행할 수 있습니다.

[^a-z0-9-_.] : 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자를 제외한 나머지 문자를 의미( 먼저 대괄호 안에 ^있는 경우에는 부정을 뜻하며 a-z,0-9,-,_,. 가 아닌 경우를 의미함)

 

\\.{2,}: \\.은 문자 그대로 점(.)을 나타내고 {2,}: 이 부분은 수량자로서 {}를 사용하며, 이전 요소가 최소 2번 이상 반복되어야 함을 나타냅니다. 또한 예를 들어 a* 인 경우 "", "a", "aa", "aaa" ... a가 0번이상 나올 수 있다는 걸 정규식으로 표현한 것이다. 

  • * : 0번 이상
  • + : 1번 이상
  • ? : 0번 or 1번
  • {n} : 바로 앞의 요소가 정확히 n번 반복
  • {n,} : 바로 앞의 요소가 최소 n번 이상 반복
  • {n,m} : 바로 앞의 요소가 최소 n번 에서 최대 m번까지 반복
더보기
  1. a{3}: 'a' 문자가 정확히 3번 반복되는 문자열과 일치합니다. (예: 'aaa')
  2. a{2,}: 'a' 문자가 최소 2번 이상 반복되는 문자열과 일치합니다. (예: 'aa', 'aaa', 'aaaa' 등)
  3. a{2,4}: 'a' 문자가 최소 2번에서 최대 4번까지 반복되는 문자열과 일치합니다. (예: 'aa', 'aaa', 'aaaa')

^\\.|\\.$ : 시작과 끝이 .으로 끝나는 것을 의미 ^: 시작, $ : 끝

 

| : 여러가지 패턴 중 하나를 뜻한다. 쉬운 예로는 cat|dog -> cat or dog 을 의미

[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+(?:com|org|net|edu)  이 정규표현식은  'john.doe@example.com', 'jane_doe@example.org', 'jack@example.net' 등의 이메일 주소와 일치합니다

 

https://regexr.com/ 

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

위 사이트에서 작성한 정규표현식을 테스트 및 검증하면 좋을 듯하다