정규식(예제 포함) - 1

"이제 정규 표현식에 대해 말씀드리겠습니다. 이 주제는 복잡하면서도 단순합니다. 정규 표현식을 완전히 이해하려면 두세 권의 책을 읽어야 할 수도 있지만 사용 방법을 알려드릴 수 있습니다. 지금 바로."

"숙련된 프로그래머가 농담하기를 좋아하는 것처럼 문제가 있고 정규 표현식으로 해결할 것이라고 생각하면 이제 두 가지 문제가 있습니다."

"흠."

"너무 겁주지 않았으면 좋겠어, 친구. 안 그래?"

"좋아요. 그래서 우리의 새로운 주제는 정규식입니다."

"지나치게 단순화하면 정규식은 문자열의 패턴입니다."

" 문자열이 주어진 패턴과 일치 하는지 확인할 수 있습니다 . 구분 기호나 패턴을 사용하여 문자열을 여러 부분으로 나눌 수도 있습니다."

"하지만 간단한 것부터 시작해 봅시다. 패턴이란 무엇입니까? "

"SQL에서는(Java에서는 아님) 문자열이 특정 패턴과 일치하는지 확인할 수 있습니다. 다음과 같이 표시됩니다."

name like 'Alex%'

여기서 name은 변수, like는 패턴을 확인하는 명령이고 "Alex%"는 패턴입니다.

이 경우 %는 모든 문자열 또는 하위 문자열을 의미합니다.

무늬 패턴과 일치하는 문자열
'알렉스%' Alex
Alex andr
Alex ander
Alex andra
….
'%엑스%' 맥스 x
맥스 임 에일 x 앤더 … _

'%ㅏ' 올그
헬렌
이르

"SQL에서 다른 문자가 하나만 있어야 한다고 지정해야 하는 경우 밑줄 문자 "_"를 사용합니다."

무늬 패턴과 일치하는 문자열
'알렉스%_' Alex
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: \\\\ \\. *";

"와! 와. 이제 알았어."

"그리고 이것에 대해 더 깊이 파고들기로 결정했다면 다음과 같은 몇 가지 좋은 링크가 있습니다."

위키피디아 강의