php preg_replace, preg_match... 펌 > 리눅스 Tip

본문 바로가기
 

php preg_replace, preg_match... 펌

페이지 정보

작성자 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 13,441회 작성일 12-12-24 19:24

본문

cf. preg_replace('/[1-9]+.\-.[1-9]+$/','',$test);
일치하는 패턴 찾기 - preg_match()함수 spc.gif PHP spc.gif
2009/07/18 01:12
 
 
* 패턴이란 일정한 형식을 의미한다고 할 수 있다.
* PHP에서 패턴검사를 하는데는 preg_match()함수를 사용할 수 있다.
[preg_match()]
int preg_match(string pattern, string subject, array [matches]);
subject에 일치하는 패턴(pattern)이 있으면 preg_match()는 참을 반환한다.
이 함수에 사용되는 pattern은 정규표현식의 형식을 따라야 한다.
패턴임을 알리기 위해 앞과 뒤를 슬래시(/)로 묶어 주어야 한다.
마지막 슬래시 뒤에 옵션을 줄 수 있는데, i는 대소문자 구분을 하지 않음을 의미한다.
 
 
패턴과 일치하는 데이터가 있다면, 이 데이터는 뒤에 있는 matches배열에 기록된다.
첫 번째 배열 요소에는 패턴과 일치하는 데이터가 대입되고, 두 번째 요소에는 패턴내에 괄호로 묶인 부분에 해당하
는 데이터가 대입된다.
 
문자와 일치하는 패턴
 
* 단순히 문자(열)와 일치하는 패턴을 찾는 것은 가장 쉬운 경우이다.
* ex05.php
 
<?
$subject = "Go To page #9";
$pattern = "/to/i";
if(preg_match($pattern, $subject, $matches))
echo "일치하는 패턴이 있습니다. (".$matches[0].")";
else
echo "일치하는 패턴이 없습니다.“;
?>
 
* 실행 결과
일치하는 패턴이 있습니다. (To)
 
 
여러 문자 중 어느 한 개
 
많이 사용되는 패턴 형식 중의 하나이다.
정수 0부터 9까지 중 어느 하나와 일치하는 경우만을 찾고 싶으면 다음과 같이 할 수 있다.
 
 
<?
$subject = "Go To page #9";
$pattern = "/[0-9]/";
if(preg_match($pattern, $subject, $matches))
echo "일치하는 패턴이 있습니다. (".$matches[0].")";
else
echo "일치하는 패턴이 없습니다.“;
?>
 
일치하는 패턴이 있습니다. (9)
 
 
* 대괄호([])로 묶은 안의 값은 그 중 어느 값이든 일치하면 된다는 것이다.
다음은 몇 가지 패턴의 예를 보여준 것이다.
/[abc]/ a, b, c 중 어느 한 문자와 일치하는 패턴.
/[a-z]/ a부터 z까지 문자 중 한 문자와 일치하는 패턴.
/[a-zA-Z]/ a부터 z까지 그리고 A부터 Z까지 중 어느 한 문자와 일치하는 패턴.
/[^a-zA-Z]/ /[a-zA-Z]/의 부정이다. 즉, /[a-zA-Z]/을 제외한 다른 패턴을 의미한다.
[]안에 나오는 음의 부호(-)는 바로 앞 문자부터 바로 뒤 문자까지에 이르는 모든 문자를 의미한다.
문자의 순서는 아스키코드를 기본으로 하고 있다.
모든 알파벳은 "/[A-z]/"가 아니라 “/[A-Za-z]/”을 사용해야 한다.
->이유는 아스키코드 테이블에 보면 대문자와 소문자 사이에 ‘[’, ‘\’, ‘]’, ‘^’, ‘_’, ‘`’이 존재하기
때문이다.
 
 
패턴 반복하기
 
원하는 패턴이 단순히 어느 범위내의 한 문자이지는 않다. 여러 개의 조건이 반복되는 경우가 많은데 이럴 경우 다음과 같이 할 수 있다.
 
<?
$subject = "Go To page #9";
$pattern = "/[a-zA-Z]+ /";
if(preg_match($pattern, $subject, $matches))
echo "일치하는 패턴이 있습니다. (".$matches[0].")";
else
echo "일치하는 패턴이 없습니다.";
?>
 
 
* 패턴 뒤에 붙는 +기호는 바로 앞의 조건이 한번 이상 반복되는 데이터를 찾으라는 의미를 가진 특수문자
+기호는 0번 이상 반복하는 것을 의미한다. 즉, 한번도 일치하는게 없어도 된다는 의미이다.
 
만약 이러한 패턴 전체를 반복하여 만족하는 데이터를 구하려고 한다면 어떻게 해야 할까?
패턴 전체를 괄호로 묶고 거기에 +기호를 붙이면 된다.
 
 
<?
$subject = "Go To page #9";
$pattern = "/([a-zA-Z]+ )+/";
if(preg_match($pattern, $subject, $matches)) {
echo "일치하는 패턴이 있습니다.<br>\n";
for($i=0;$i<count($matches);$i++)
echo $i." ".$matches[$i]."<br>\n";
}
else
echo "일치하는 패턴이 없습니다.";
?>
 
알파벳의 연속인 문자열에 뒤에 빈칸이 하나 있는 경우가 계속 반복되는 패턴을 찾는 것이다.

댓글목록

등록된 댓글이 없습니다.

Total 138건 1 페이지
리눅스 Tip 목록
번호 제목 글쓴이 조회 날짜
138 no_profile 최고관리자 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16136 11-20
137 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 11029 06-25
136 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19472 06-23
135 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 20729 04-11
134 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 20858 04-10
133 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 21512 12-24
열람중 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 13442 12-24
131 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19138 11-15
130 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 21048 11-07
129 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 20472 10-21
128 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 11988 10-18
127 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 11466 10-16
126 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 18335 10-08
125 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19236 09-02
124 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19694 08-05
123 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 12382 07-22
122 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 20403 06-21
121 no_profile 차동박 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 19842 06-12
게시물 검색