정규식 만드는 법을 알아보았습니다
원하는 형태
숫자 00으로 시작하고 총 문자열의 길이는 6자 이상 8자이하 3번째 자리부터는 영문이
꼭 하나 이상 포함 되어야 한다는 정규식을 이전에 구글 바드에게 물어보았으나
원하는 답이 나오지 않았습니다.
이런 문자들이 선택되고
0012345b
00123b
00b123
00c12345
00caaaaa
아래의 문자들은 탈락해야 하는데
001234
00123456
0012345b7
01123456
0112345b
챗 gpt등 복잡한 정규식을 잘 이해시키기는 힘들어 찾아 보니
^00(?=.*[a-zA-Z].*)(\w{6})$
이런 정규식을 얻게 되었는데 풀이 하자
^00 - 00문자로 시작하고
(?=.*[a-zA-Z].*) - 이 부분이 제일 헷갈리는데
정규표현식 Lookahead, Lookbehind 기능
이라는 건데 정규식 표현식에 보면 () 괄호안의 것은 그룹으로 캡쳐 한다는
설명들도 있는데 이 말도 도통 어떤 기능인지 이해 하기가 힘든데
괄호로 둘러 싸여 있고 아래와 같은 패턴일 경우
?= 는 앞쪽의 패턴을 찾고 괄호안의 패턴을
?<= 는 뒤쪽의 패턴을 매칭하고 조건을 보는 건데
어디선 전방 탐색 후방 탐색이라고 표현 하기도 하고 해서 쓰는데
자꾸 헷갈리네요
그래서 이부분은 (?=.*[a-zA-Z].*) 앞쪽의 탐색 조건 00으로 시작한다를 탐색후 매칭이 되는지 확인 하는 부분같은데
. - 어떤 문자이든
* - 없거나 전부 0회 이상
[a-zA-Z] - 알파벳이 있어야 하는거고
[a-zA-Z].*) - 뒤쪽에도 없거나 0회이상 아무거나 올수 있다는 패턴으로 이해
(\w{6})$ 이건
$ - 마지막에 뒤쪽에서 패턴을 분석하는거라
뒤의 \w 문자는 6자 이어야 하고 를 뜻함
흠 결과를 놓고 보면 간단한거 같지만 직접 만드는건 먼가 좀 헷갈리고 맞는지 불안하다
AI에게 물어 보았을때는 간단한 경우는 잘 알려줬지만
복잡해 지면 소통이 잘 안되는 느낌이었고 그래서 내가 원하는 복잡한 패턴은
만들어 주지 못했다 그래서
바드에게 만들어 진것을 해석해 달라고 해 보았다
질문:
정규식 ^00(?=.*[a-zA-Z].*)(\w{6})$ 이거 해석해 줘
대답:
정규식 ^00(?=.*[a-zA-Z].*)(\w{6})<span class="math-inline">\은 00으로 시작하고, 영어 알파벳과 숫자, 특수문자 중 하나 이상을 포함하는 6자 이상의 문자열을 나타냅니다.
* `^`는 문자열의 시작을 나타냅니다.
* `00`은 00으로 시작해야 함을 나타냅니다.
* `(?=.*[a-zA-Z].*)`은 영어 알파벳과 숫자, 특수문자 중 하나 이상을 포함해야 함을 나타냅니다.
* `\w`는 영어 알파벳, 숫자, 특수문자를 나타냅니다.
* `{6}`는 6자 이상이어야 함을 나타냅니다.
* ``는 문자열의 끝을 나타냅니다.
예를 들어, 123456789, abcde1234, !@#<span class="math-inline">%^&\*\는 이 정규식과 일치하는 문자열입니다. 반면에, `123456`, `abcde`, `!@#%`는 이 정규식과 일치하지 않는 문자열입니다.
여기까지가 대답인데
^00(?=.*[a-zA-Z].*)(\w{6})$ 이 정규식을 사용하였을때는 123456 은 통과를 못하나
바드의 대답은 123456도 통과 된다고 나오고 잘 작동되는 정규식을 넣어도 이상한 답변이 나왔다
그래서 질문을 정규식 "^00(?=.*[a-zA-Z].*)(\w{6})$" 이거 해석해 줘
따옴표를 붙여서 넣어 보니 대답은
^00(?=.*[a-zA-Z].*)(\w{6})$는 다음과 같이 해석됩니다.
^는 문자열의 시작을 나타냅니다.
00은 두 개의 0을 나타냅니다.
(?=.[a-zA-Z].)는 문자열에 최소한 하나의 영어 소문자가 포함되어 있어야 한다는 것을 나타냅니다.
(\w{6})는 문자열의 끝에서 6개의 문자를 나타냅니다.
$는 문자열의 끝을 나타냅니다.
즉, 이 정규식은 두 개의 0을 포함하고 최소한 하나의 영어 소문자가 포함된 6개의 문자로 구성된 문자열을 일치시킵니다.
예를 들어, "00abcd123"는 이 정규식과 일치하는 문자열이지만, "00123456"는 일치하지 않는 문자열입니다.
답처럼 보이고 비슷해 보이지만 00abcd123 얘는 8자가 넘어서 매칭이 되면 안되는데 일치 한다고 나오는 이상한 답변이 돌아왔다.
(?=.[a-zA-Z].) 요 부분에선 *도 생략해 버리고
아무튼 아직 AI를 전적으로 믿기는 힘든거 같고 참고용으로 사용해야 할거 같다.
부정확한 답변이지만 굉장히 신뢰성 있게 말하는게 더 불안하다
정규식을 자주 쓰면 제대로 배워서 익히면 좋을거 같지만 어쩌다 한번 사용하고 먼가 정확한 룰을 모르겠는게
그렇다고 깊게 파기엔 시간이 아깝고 나만 그러진 않을꺼 같은데
어여 AI들이 더 발전해서 이런거 원하는대로 뚝딱 만들어 주면 좋을거 같다.
바드가 정확한 답변을 주지는 않았지만 참조용으로 사용하면 될거 같고 정규식은 헷갈리지만
필요할때마다 익히면서 적응하면 될거 같다.
'개발 > TOOLS' 카테고리의 다른 글
MIDI 파일 이란? MID 파일과 차이가 있나? 무료 프로그램 추천 (1) | 2024.09.07 |
---|---|
필모라와 프리미어 프로 비교 (5) | 2024.09.06 |
자바 정규식 만들기 쉽게 하는 법 AI 구글 바드 (0) | 2023.05.18 |
포토샵 수 기능 개체 선택 도구로 이미지 누끼 따는 방법들 (0) | 2023.02.10 |
포토샵 cc 2022 한글 올가미, 개체 선택 도구 사용 방법 (0) | 2023.02.08 |