1. 정규 표현식이란.
문자열의 특정한 패턴을 표시하거나 검사하기 위한 규칙을 의미하며 어떤 문자열의 집합을 표시하는 텍스트 string이나 일반적인
텍스트 형시의 문서 등에서 문자열을 찾아내거나 검사하고 치환하는데 사용된다. 이러한 정규 표현식은 정규 표현식을 표시하는
특수문자와 정규 표현식을 검사하기 위한 함수가 있다.
2. 패턴을 표현하는 특수 문자
특수 문자 | 내용 | 해당문자열 |
. | 임의의 한 글자를 의미한다. | a.b (abc, acb, afb...) |
* | * 바로 앞의 문자가 없거나 한개 이상이 있을 경우 | a*b (b, ab, aab, aaab...) |
+ | + 바로 앞의 문자가 최소 한 개 이상일 때 | a+b (ab, aab, aaab...) |
? | ? 바로 앞의 문자가 없거나 한 개 존재하는 경우 | a?b (b, ab, cb, zb...) |
^ | ^ 뒤에 문자열과 같은 문자열로 시작한는 경우 [] 안에서 ^ 는 [] 안의 문자를 제외한 문자를 의미한다. | ^ab (ab, abc, abdr...) |
$ | $ 앞의 문자열과 같은 문자열로 끝나는 경우 | ab$ (ab, sab, aaab...) |
[] | [] 안의 문자열 중에 하나만의 문자만을 의미한다. | [a-z], [0-9], [a-zA-Z] |
{} | {} 앞의 문자열의 개수를 의미한다. | a{1-3}b (ab, aab, aaab) |
() | () 안의 문자는 그룹으로 인식한다. | a(bc){2} (abcbc) |
| | or 연산자이다. | a(b|c)d (abd, acd) |
[[:alpha:]] | 모든 알파벳의 문자 한 자를 의미한다. | [a-zA-Z]와 동일 |
[[:digit:]] | 모든 숫자 한 자를 의미한다. | [0-9]와 동일 |
[[:alnum:]] | 알파벳과 숫자중 한 자를 의미한다. | [a-zA-Z0-9]와 동일 |
[[:space:]] | 공백 문자를 의미한다. |
|
[[:punct:]] | 구두점을 의미 |
|
\ | . * + ? ^ $ [] {} () | \ 문자를 표시할때 | (\*, \\, \[1\], \|...) |
3. 정규 표현식의 특수문자 사용법
1) ^a?bc : a로 시작해서 bc로 끝나는 문자(abc로 시작하는 문자)와 bc로 시작하는 모든 문자 (예 abcd, bcd)
2) ^.a : a앞에 아무 한 문자가 있어야 하고 그 문자로 시작하고 a가 들어간 문자 (예 aa, bacd, match, para)
3) a?b$ : b로 끝나는 문자열 중에 a가 없거나 한 개 이상 존재하는 문자열 (예 b, ab, aab)
4) a?b+$ : 첫 글자는 a가 있거나 없고 b가 한 개 이상이고 b로 끝나는 문자 (예 ab, b, bb, abbb, abbbb)
5) ^ab$ : 첫 글자가 a이고 끝나는 문자가 b인 경우 (예 ab)
6) [ab]cd : a나 b중에 한 글자와 cd가 포함된 acd, bcd를 포함한 문자 (예 acd, bcd, acdse)
7) ^[a-zA-Z] : 영문자로 시작하는 모든 문자 (예 a, b, c, d, ee)
8) [^ab]cd : cd 문자열 앞에 a나 b를 제외한 문자가 있는 문자열 즉, acd와 bcd를 제외한 문자열을 의미한다. (예 scd, dcd, ffcd)
9) a{2,}b : a의 개수가 최소 2개 이상이고 다음 문자가 b인 문자 (예 aab, aaabcd, aaaab)
-------------------------------------------------------------------------------------------------------------------------------------------------
정규표현식 기초
. : 다수의 한문자
? : 0개 이상의 한문자
* : 0개 이상의 문자 또는 문자열
+ : 1개 이상의 문자 또는 문자열
(chars) : (, ) 안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있습니니다.
^ : 문자열의 첫문(열)을 지정합니다.
$ : 문자열의 끝 문자(열)을 지정합니다.
\(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)
{n} : 정확히 n번 반복
{n,} : n번 이상 반복
{n,m} : n 이상 m 이하 반복
[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T
정규표현식 단축표현들
[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현
[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현
[:digit:] : 숫자 [0-9] 와 같은 표현
[:upper:] : 대문자. [A-Z] 와 같은 표현
-------------------------------------------------------------------------------------------------------------------------------------------------
PHP는 POSIX와 Perl이라는 두 가지 스타일의 정규 표현식을 지원한다. POSIX스타일의 정규 표현식이 PHP에서 기본이지만,
Perl 스타일도 PCRE(Perl-Compitable Regular Expression)라이브러리를 사용하여 표현할수 있다.
아래의 설명은 POSIX 스타일을 기준으로 한다.
. : 문자는 줄바꿈 문자(\n)을 제외한 모든 문자를 대신할수 있다 (하나의 문자)
ex) .at : 이런 정규식은 cat, sat, mat등이 해당된다.
[a-z]at : []의 문자들은 문자 클래스라고 하고, 일치시키는 문자는 이 클래스에 속해야 한다. []안의 것들은
모두 각각 하나의 문자이다.
ex) [aeiou] : 영어의 모음에 해당되는 단어로 []안의 하나의 문자가 된다.
또한 범위를 사용해서도 표현할수 있는데 -를 사용한다.
ex) [a-zA-Z] : 대소문자 알파벳 한 문자를 의미한다.
집합의 구성원이 아니라는 표현으로 ^를 사용한다. 이는 []안에 ^가 있을경우 not이라는 의미를 가진다.
ex) [^a-z] : 소문자 알파벳 이외의 한 문자를 의미한다.
[[:alnum:]] 알파벳 문자, 숫자
[[:alpha:]] 알파벳
[[:lower:]] 소문자
[[:upper:]] 대문자
[[:digit:]] 십진법의 숫자
[[:xdigit:]] 16진법의 숫자
[[:punct:]] 구두점
[[:blank:]] 탭, 스페이스
[[:space:]] 공백 문자들
[[:cntrl:]] 컨트롤 문자들
[[:print:]] 모든 출력 가능한 문자들
[[:graph:]] 스페이스를 제외한 모든 출력 가능한 문자들
* : 패턴이 0번 이상 반복될 수 있음을 나타내고l
+ : 한번이상 반복될 수 있음을 나타낸다.
ex) [[:alnum:]]+ : 알파벳이나 숫자 한문자가 한번이상 반복. 즉, 적어도 하나이상의 알파벳이나 숫자를 의미한다.
한 문자열 뒤에 어떤 문자열이 반복해서 나타남을 정규 표현식으로 나타낸 것은 아래와 같다.
ex) (very )*large : 이는 large, very large, very very large등과 일치한다.
{}를 통해서 반복되는 횟수를 제한할 수 있다.
{3}는 세번 반복, {2, 4}은 두번에서 네번 사이로 반복, {2, }는 적어도 2번 이상 반복의 의미이다.
ex) (very ){1, 3} : very , very very , very very very 와 일치한다.
^ : 정규 표현식의 시작부분에 사용되며, 검색하는 문자열의 맨 앞부분에 이 표현이 있어야 함을 의미한다.
$ : 정규 표현식의 뒷부분에 사용되고 이 표현으로 문자열이 끝나야 됨을 의미한다.미
^[a-z]$ : a부터 z사이의 한문자를 의미한다.
| : 선택을 표현하는 경우 사용된다.
ex) com|edu|net : com이거나 edu이거나 net인경우를 의미한다.
\ : '.', '{', '$', '-', 등의 특수문자를 정규 표현식을 위한 특수문자가 아닌 문자로 사용하고 싶을때 '\'를 붙여서 사용한다.
'\'를 표현할때는 '\\'라고 써준다.
ex) \\\$ : 이 경우 \$를 찾고자 할경우를 의미하게 된다.
POSIX 정규 표현식에서의 특수문자의 의미
1) []밖에서 사용되었을때
- / : 특수문자 이스케이프
- ^ : 문자열의 처음에서 일치되어야 함
- $ : 문자열의 끝에서 일치되어야 함
- . : 줄바꿈(\n)을 제외한 모든 문자와 한개를 의미
- | : 또는의 의미
- ( : 패턴의 시작
- ) : 패턴의 끝
- * : 0번 이상 반복됨
- + : 1번 이상 반복됨
- { : 반복 횟수 지정의 시작
- } : 반복 횟수 지정의 끝
- ? : 하위 표현식을 옵션으로 취급
2) []안에서 사용되었을때
- / : 특수문자 이스케이프
- ^ : 맨 처음 시작되었을 때만 not의 의미, 이외에는 문자로 인식
- - : 문자의 범위 지정
ex) ^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$
대소영문자, 숫자, _, -, .중 한개의 문자인데 문자열의 처음에 나타나야 되고 +가 있어서 한번이상 반복된다.
그 이후 @ 문자 한문자가 있어야 되고 대소영문자, 숫자, -중 한개의 문자인데 +가 있어서 한번이상 반복된다.
그 이후 . 문자 한문자가 있어야 되고 대소영문자, 숫자, -, .중 한개의 문자인데 +가 있어서 한번이상 반복되며 끝난다.