"이제 정규 표현식에 대해 말씀드리겠습니다. 이 주제는 복잡하면서도 단순합니다. 정규 표현식을 완전히 이해하려면 두세 권의 책을 읽어야 할 수도 있지만 사용 방법을 알려드릴 수 있습니다. 지금 바로."
"숙련된 프로그래머가 농담하기를 좋아하는 것처럼 문제가 있고 정규 표현식으로 해결할 것이라고 생각하면 이제 두 가지 문제가 있습니다."
"흠."
"너무 겁주지 않았으면 좋겠어, 친구. 안 그래?"
"좋아요. 그래서 우리의 새로운 주제는 정규식입니다."
"지나치게 단순화하면 정규식은 문자열의 패턴입니다."
" 문자열이 주어진 패턴과 일치 하는지 확인할 수 있습니다 . 구분 기호나 패턴을 사용하여 문자열을 여러 부분으로 나눌 수도 있습니다."
"하지만 간단한 것부터 시작해 봅시다. 패턴이란 무엇입니까? "
"SQL에서는(Java에서는 아님) 문자열이 특정 패턴과 일치하는지 확인할 수 있습니다. 다음과 같이 표시됩니다."
name like 'Alex%'
여기서 name은 변수, like는 패턴을 확인하는 명령이고 "Alex%"는 패턴입니다.
이 경우 %는 모든 문자열 또는 하위 문자열을 의미합니다.
무늬 | 패턴과 일치하는 문자열 |
---|---|
'알렉스%' | Alex Alex andr Alex ander Alex andra …. |
'%엑스%' | 맥스 x 맥스 임 에일 x 앤더 … _ |
'%ㅏ' | 올그 아 헬렌 아 이르 아 … |
"SQL에서 다른 문자가 하나만 있어야 한다고 지정해야 하는 경우 밑줄 문자 "_"를 사용합니다."
무늬 | 패턴과 일치하는 문자열 |
---|---|
'알렉스%_' | Alex andr Alex ander Alex andra …. |
'_엑스' | 도끼 Bx Cx … |
'___' | 아아아 브 뱁 ... |
"말이 되네요."
"좋아, 그럼 정규표현식으로 넘어가자."
"정규 표현식은 일반적으로 문자 수뿐만 아니라 '내용'에 대한 제한을 포함합니다. "모든 마스크는 일반적으로 두 부분(때로는 그 이상)으로 구성됩니다. 첫 번째 부분은 문자 '기본 설정'을 설명하고 두 번째 부분은 문자 수를 설명합니다. ."
"다음은 몇 가지 콘텐츠 예입니다."
무늬 | 설명 | 예 |
---|---|---|
. | 임의의 한 문자 | 1 |
\디 | 모든 숫자 | 7 |
\디 | 숫자가 아닌 모든 | 씨 |
\에스 | 공백, 줄 바꿈 또는 탭 문자 | ' ' |
\에스 | 공백, 탭 및 줄 바꿈을 제외한 모든 것 | 에프 |
[아즈] | a에서 z까지의 모든 문자 | 지 |
[0-9] | 0에서 9까지의 숫자입니다. | 8 |
\w | 모든 단어 문자 | 씨 |
\W | 단어가 아닌 모든 문자 | _ |
"바로 기억이 나지는 않지만 그렇게 어려워 보이지는 않습니다."
"훌륭합니다. 다음은 마스크의 문자 수에 대한 예입니다. "
무늬 | 설명 | 예 |
---|---|---|
ㅏ? | 문자 'A'가 한 번 발생하거나 전혀 발생하지 않음 | ㅏ |
B+ | 문자 'B'가 한 번 이상 나타납니다. | BBBB |
씨* | 문자 'C'가 0번 이상 발생합니다. | CCC |
D{n} | 문자 'D'가 n번 나타납니다. | 패턴 D{4}는 DDDD와 일치합니다. |
에{n,} | 문자 'E'가 n번 이상 나타납니다. | 패턴 E{2,}는 EEEEEEE와 일치합니다. |
F{n,m} | 문자 'F'가 n번에서 m번 사이에 나타납니다. | 패턴 E{2,4}는 EEEE와 일치합니다. |
"모든 것이 매우 간단해 보입니다."
"당신은 모든 것을 너무 빨리 파악하고 있습니다. 이제 모든 것이 어떻게 보이는지 봅시다:"
무늬 | 설명 | 예 |
---|---|---|
[기원 후]? | 'a'와 'd' 사이의 문자가 한 번 발생하거나 전혀 발생하지 않음 | 아, 나, 씨, 디 |
[bd,z]+ | 문자 'b', 'c', 'd' 또는 'z'가 한 번 이상 나타납니다. | 비, bcdcdbdbdbdbzzzzbbzbzb, zbz |
[1,7-9]* | 숫자 1, 7, 8 또는 9가 0번 이상 나타납니다. | 1, 7, 9, 9777, 111199 |
1{5} | 숫자 1이 5번 나타납니다. | 11111 |
[1,2,a,b]{2} | 기호 1, 2, 'a' 또는 'b'가 두 번 나타납니다. | 11, 12, 1a, ab, 2b, bb, 22 |
[a,0]{2,3} | 기호 'a' 또는 0이 2~3번 나타납니다. | 아아, 아0,00,0a, 아아,000, 아00,0a0, 아0a |
"아직은 깨끗해."
"정말요? 흠. 내가 모든 것을 정말 잘 설명했거나, 당신이 너무 빨리 알아차렸거나. 음, 어느 쪽이든, 그것은 우리에게 좋습니다."
"여기 몇 가지 새로운 통찰력이 있습니다."
"하위 문자열을 찾는 데 정규식을 사용하는 경우가 많기 때문에 패턴에 두 개의 문자(^ 및 $)를 더 추가할 수 있습니다."
"^는 하위 문자열이 문자열의 시작 부분을 포함해야 함을 의미합니다."
"$는 하위 문자열이 문자열의 끝을 포함해야 함을 의미합니다."
"여기 몇 가지 예가 있어요:"
무늬 | 패턴과 일치하는 문자열 및 하위 문자열 |
---|---|
ㄱ{3} | 아아 아아아 아아아 _ _ |
ㅏ{3}$ | 아아아아아 아아아 |
^a{3} | 아아 아아아아아아 |
^a{3}$ | 아아아아아아아아 |
"그리고 한 가지 더 중요한 점."
"정규 표현식에서 다음 문자는 특별한 의미를 갖습니다. [ ] \ / ^ $ . | ? * + ( ) { }. 제어 문자라고 합니다. 따라서 단순히 문자열에서 사용할 수 없습니다."
"Java 코드에서와 마찬가지로 이스케이프되어야 합니다. "그리고 다시 Java 코드에서와 같이 '\' 문자가 여기에 사용됩니다."
"세 개의 '?'로 구성된 문자열을 설명하려면 '?{3}'을 쓸 수 없습니다. 왜냐하면 '?' 때문입니다. 제어 문자입니다. 다음과 같이 해야 합니다: \?{3}. '\' 문자를 사용하려면 '\\'를 써야 합니다."
"알았다."
"자바 코드가 있는 파일에서 '\' 문자도 제어 문자이기 때문에 문자열에서 이스케이프되어야 합니다."
"물론."
"따라서 문자열에서 Java 정규식을 정의하려는 경우 '\' 문자를 두 번 이스케이프 처리해야 합니다."
"다음은 예입니다."
'c:\anything'과 일치하는 마스크를 원합니다. |
이론적으로 정규 표현식은 하나의 'c' 문자, 콜론, 백슬래시, 마침표 및 별표(모든 문자 수를 나타냄) 와 같아야 합니다 . 가독성을 높이기 위해 공백을 추가했습니다: c : \ .* 그러나 문자 '\' 및 '.' 이스케이프해야 하므로 정규식은 c : \\ \와 같이 표시됩니다. * 또는 공백 없이 c: \\ \. * |
"정규식에는 3개의 백슬래시가 있어야 합니다. 즉, Java 파일에서 정규식은 다음과 같습니다." String regexp = "c: \\\\ \\. *"; |
"와! 와. 이제 알았어."
"그리고 이것에 대해 더 깊이 파고들기로 결정했다면 다음과 같은 몇 가지 좋은 링크가 있습니다."