정규표현식(php)

렛츠웹 + 게임/My Tip 2009. 1. 5. 16:49
1.정규표현식이란?
정규표현식이란 어떤한 문자열의 집합을 정확하게 나타내기 위한 표현 규칙이다.
찾고자 하는 문자열들이 가진 공통된 패턴을 정규표현식을 이용해 표현, 지정함으로써 이 패턴에 일치하는 문자열의 검색을
쉽게 할 수 있고 좀 더 세밀한 방법으로 검색이 가능하다.

2.정규표현식의 규칙
1) .
임의의 한 글자를 가리킨다.
s.e :   sae, sbe, sce, sde

2) *
* 바로 앞의 문자가 없거나 하나 이상임을 나타낸다.
// * 앞에 있는 문자인 s가 e 앞에 없거나 하나 이상 존재한다.
s * e  : e, se, sse, ssse

3) +
+ 바로 앞의 문자가 하나 이상이다.
s + e : se, sse, ssse

4) ?
? 바로 앞의 문자가 없거나 1개 임을 나타낸다.
th?e : te, the

5) ^
^ 바로 뒤의 문자열(뒤에 있는 문자 모두)로 시작된다.
^the       the로 시작하는 모든 문자  the girl, theater
^a?bc    bc나 abc로 시작하는 모든 문자열 bceft, abcdef
^.e        e 앞에 한 글자가 존재하는 문자열로 시작   he, me, request
^s.e?     s와 한 문자로 시작하고 그 뒤에 e가 하나 있거나 없는 문자열  sa, sae, sb

6) $
$ 바로 뒤에 나오는 문자열로 끝나는 것을 의미
a?bc$    eeabc, seebc, bc
t.e$       onthetoe, bctae
s?e+$    e, se, ee, seee
^the$     the

7) [ ]
괄호 안에 있는 문자열 중에서 하나의 문자를 포함하는 문자열
.범위를 지정할 때에는 - 사용한다.                 // [0-9], [a-z]
.원하지 않는 문자를 제외할 때 [] 안에 첫문자로 ^를 사용한다.  //[^ab]cd

8) { }
{ } 앞에 있는 문자나 문자열의 개수를 나타낸다.
{n} : n개    {n,} : 최소 n개    {n,m} : n개에서 m개까지
a{2}b      {}앞에 있는 문자 a의 개수가 2개임     aab
a{2 ,}b    a의 개수가 최소한 2개임                   aab, aaab, aaaab
a{1,3}b   a의 개수가 1개에서 3개까지임            ab, aab, aaab

9) ( )
( ) 안에 있는 글자들을 그룹화한다.
a(bc){2}  bc가 두 개임          ocabcbctor

10) |
or 연산자이다.
he|she   he 나 she 를 포함하는 문자열  he is handsome, she"s gone


3.정규 표현식에서 특수 문자의 사용

정규 표현식에서 사용되는 특수 문자를 특수 문자가 아닌 그 문자 자체의 의미로 사용하려면
특수 문자 앞에 역슬래시()를 붙여야 한다.
이를 특수문자를 escape시킨다,, 고 한다.

특수문자: ^ . [ ] $ ( ) | * + ? { }


4.문자 클래스

패턴을 [a-z]나 [A-Z]로 표현하는 대신 축약 형태의 문자 클래스로 간단히 표현하는 것
[[:alpah:]]    알파벳 문자 중 하나를 의미하며             [a-zA-Z] 또는 [a-Z]와 동일
[[:digit:]]      숫자 한자를 의미하며                           [0-9]와 동일
[[:alnum:]]    알파벳 문자나 숫자 중 하나를 의미하며  [a-zA-Z0-9]와 동일
[[:space:]]   공백문자(" ")를 의미
[[:punct:]]    모든 구두점 기호

 

=======================================================================

초보자를 위한 PHP 강좌  - 정규표현식 | PHP학습  2006.11.30 23:17 
 

PHP 에서 제공하는 정규 표현식에 대해서 알아보겠습니다.

정규 표현식은 웹 프로그래밍을 할 때 문자열을 정교하게 처리하기 위해 필요합니다.

먼저, 정규 표현식에서 사용되는 패턴 문자 몇 가지를 소개하면 아래와 같습니다.


+ -> "+" 표시 바로 앞의 문자열(문자)이 한 번 이상 존재하는 것을 의미함

^ -> "^" 표시 뒤의 문자열(문자)로 시작되는 것을 의미함

[ ] -> "[ ]" 로 둘러쌓인 문자열(문자) 중에서 하나의 문자를 의미함

[^ ] -> "[ ]" 패턴의 문자열(문자)을 제외한 나머지 문자열(문자)을 의미함

{ } -> "{ }" 앞의 문자열(문자)이 "{ }" 안의 숫자가 나타내는 갯수만큼 존재하는 것을 의미함


[[:digit:]] -> 하나의 숫자(0 에서 9 까지) 를 의미함

[[:alpha:]] -> 하나의 영문자(a 에서 Z 까지) 를 의미함

[[:alnum:]] -> 하나의 숫자(0 에서 9 까지) 또는 영문자(a 에서 Z 까지) 를 의미함

[[:space:]] -> 하나의 공백 문자(blank) 를 의미함


위 패턴 문자를 사용한 정규 표현식이 어떻게 사용되는지 살펴보기 전에, 위와 같은 패턴 문자로 나타내어진 정규 표현식을 사용하기 위해 필요한 함수가 있는데, ereg() 함수가 있습니다.

ereg() 함수는 일반적으로 두 개의 인자를 취하는데, 첫 번째 인자는 패턴 문자로 나타내어진 정규 표현식이 오며 두 번째 인자는 그 정규 표현식에 의해 검색될 대상 문자열이 옵니다.

이렇게 ereg() 함수 내의 두 번째 인자인 검색 대상 문자열에서 첫 번째 인자인 정규 표현식의 패턴이 존재할 경우 ereg() 함수는 true 값을 반환하며 그렇지 않을 경우에는 false 값을 반환하게 됩니다.

그럼, ereg() 함수를 사용하여 위 패턴 문자로 나타내어진 정규 표현식이 어떻게 사용되는지 몇 가지 예제를 살펴보겠습니다.

<?
$string = "mizzle PHP 2002";

# "+" 패턴 검사

if(ereg("iz+", $string)) {
  echo("지정된 패턴과 일치합니다.<br>"); # 실행 라인
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>");
}

# "^" 패턴 검사

if(ereg("^mi", $string)) {
  echo("지정된 패턴과 일치합니다.<br>"); # 실행 라인
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>");
}

# "[ ]" 패턴 검사

if(ereg("[si]m", $string)) {
  echo("지정된 패턴과 일치합니다.<br>");
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>"); # 실행 라인
}

# "[[:digit:]]" 패턴 검사

if(ereg("[[:digit:]]{4}", $string)) {
  echo("지정된 패턴과 일치합니다.<br>"); # 실행 라인
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>");
}

# "[[:alpha]]" 패턴 검사

if(ereg("[[:alpha:]]{7}", $string)) {
  echo("지정된 패턴과 일치합니다.<br>");
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>"); # 실행 라인
}

# "[[:space]]" 패턴 검사

if(ereg("[[:space:]]{2}", $string)) {
  echo("지정된 패턴과 일치합니다.<br>");
} else {
  echo("지정된 패턴과 일치하지 않습니다.<br>"); # 실행 라인
}
?>

위 예제를 실행하게 되면, 위 예제 코드의 주석("#실행 라인")으로 표기한 라인이 실행되는 것을 볼 수 있습니다.

위 예제 중 몇 가지만 살펴보면,

"+" 패턴 검사 코드의 경우, "iz" 문자열이 한 번 이상 존재해야 함을 의미하는 iz+ 패턴이 "mizzle PHP 2002" 문자열에 존재하기 때문에 비교 조건식에 일치하는 결과가 출력됩니다.

"[ ]" 패턴 검사 코드의 경우, "sm" 또는 "im" 문자열이 존재해야 함을 의미하는 [si]m 패턴이 "mizzle PHP 2002" 문자열에 존재하지 않기 때문에 비교 조건식에 일치하지 않는 결과가 출력됩니다.

"[[:digit:]]" 패턴 검사 코드의 경우, 연속되는 숫자 4개의 문자가 존재해야 함을 의미하는 [[:digit:]]{4} 패턴이 "mizzle PHP 2002" 문자열에 존재하기 때문에 비교 조건식에 일치하는 결과가 출력됩니다.

이상, 정규 표현식의 기초에 대해서 살펴보았습니다.

정규 표현식의 경우, 위에 제가 설명해 드린 부분 외에도 배울 내용이 많기 때문에 그 부분에 대해서 개인적으로 공부하시면서 충분히 연습 하시기 바랍니다. 
 

=======================================================================

정규표현식

1. 각 문자와 숫자는 해당 문자 또는 문자열이 테스트할 문자열에 있을경우 true 가된다.
<script>
// ""a"" 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /a/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>

<script>
// "about" 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /about/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


2. 대소문자 구분없이 해당 문자 또는 문자열을 검색할 경우 끝에 i 를 붙인다.
<script>
// ""a"" 또는 ""A"" 가 있는 문자열 모두가 TRUE (대소문자 구분 안함)
var filter = /a/i
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


3. 여러개의 이어지는 내용들을 검색할 경우는 ""-"" 를 넣어 표현한다.
<script>
// ""a"" 에서 ""z"" 까지중 하나만 있으면 모두가 TRUE (대소문자 구분)
var filter = /[a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


4. 여러가지의 문자 또는 문자열을 검색할 경우 ""|"" 를 넣는다.
<script>
// ""a"" 또는 ""b"" 또는 ""c"" 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /a|b|c/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>

<script>
// ""a"" 에서 ""z"" 까지 또는 ""0"" 에서 ""9"" 까지중 하나만 있으면 모두가 TRUE (대소문자 구분)
var filter = /[a-z]|[0-9]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


5. 해당 문자또는 문자열이 없는 경우를 검색할 경우 브래킷(""["", ""]"") 안에 ""^"" 를 넣는다.
<script>
// ""a"" 에서 ""z"" 까지의 문자가 아닌 문자가 있을 경우 TRUE (대소문자 구분)
var filter = /[^a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


6. 문자열의 첫번째 글자가 일치해야할 경우는 ""^"" 를 브래킷(""["", ""]"") 밖에 넣는다.
<script>
// ""a"" 에서 ""z"" 까지의 문자로 시작하는 문자열일 겨우 TRUE (대소문자 구분)
var filter = /^[a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


7. 문자열의 끝쪽 글자가 해당 문자 또는 문자열과 일치해야할 경우는 ""$"" 를 넣쨈?
<script>
// ""a"" 에서 ""z"" 까지의 문자로 끝나는 문자열일 겨우 TRUE (대소문자 구분)
var filter = /[a-z]$/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


8. 특수문자("""", ""^"", ""$"", ""*"", ""+"", ""?"", ""."", ""("", "")"", ""|"", ""{"", ""}"", ""["", ""]"")를 검색할 경우는 """" 를 넣는다.
<script>
// """" 가 있는 문자열일 경우 TRUE (대소문자 구분)
var filter = //
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


'렛츠웹 + 게임 > My Tip' 카테고리의 다른 글

키코드 만들기  (0) 2009.01.05
PHP, Ajax (prototype)을 이용한 XML 통신  (0) 2009.01.05
암,복호화 함수  (0) 2009.01.05
iframe자동 크기 조절  (0) 2009.01.05
엑셀저장처리  (0) 2009.01.05
posted by 망차니

설정

트랙백

댓글