PCRE 정규표현식 예제로 개념잡기.
http://kr2.php.net/manual/en/ref.pcre.php
http://kr2.php.net/manual/en/reference.pcre.pattern.syntax.php
http://kr2.php.net/manual/en/reference.pcre.pattern.modifiers.php
위 링크가 이해가 안되어도 스크롤을 천천히 내려가며 한번 읽어주고 본문을 읽어주세요.
본문에 없는건 묻지 마세요. 모릅니다.
pattern syntax
1. [0-9] 는 \d 로 표현하는것이 편리하다.글 수정시에 글번호를 체크해 보자.
<?php
if(!isset($_POST['seq']) || !preg_match('/^[1-9]\d*$/', $_POST['seq'])) { // 시퀀스는 1부터 시작하므로 처음은 1-9 이다.
header('HTTP/1.1 400');
echo str_repeat('해킹은 사절<br />', 200);
exit;
}
?>
if(!isset($_POST['seq']) || !preg_match('/^[1-9]\d*$/', $_POST['seq'])) { // 시퀀스는 1부터 시작하므로 처음은 1-9 이다.
header('HTTP/1.1 400');
echo str_repeat('해킹은 사절<br />', 200);
exit;
}
?>
2. ' '(공백)은 알아보기 쉽도록 \s 로 써주면 좋다.
3. \(백슬래시) 를 표현할때 버그인지 \\ 로 하면 안된다.
\\\ \\\\\ 이런식으로 홀수가 되는데 그냥 \x5c 로 hex 표현해주면 편하다.
4. (?) 로 매칭결과에 표현되지 않고 조건만 표현할 수 있다.
문자는 *나 + 등의 가변길이를 지원하지 않는다.
(?=문자) (?!문자) : 문자열 길이 계산에 반영되지 않고 조건만 검사한다.
<?php
$text = 'abcd';
echo preg_replace('/(?=b)./', 'e', $text); // 조건에 맞는곳에서 한글자 가져오기.
?>
$text = 'abcd';
echo preg_replace('/(?=b)./', 'e', $text); // 조건에 맞는곳에서 한글자 가져오기.
?>
aecd
(?<=문자) (?<!문자) : 문자열 길이 계산에 반영된다.<?php
$text = 'abcd';
echo preg_replace('/(?<=b)./', 'e', $text); // 조건이 맞는곳 다음 한글자 가져오기.
?>
$text = 'abcd';
echo preg_replace('/(?<=b)./', 'e', $text); // 조건이 맞는곳 다음 한글자 가져오기.
?>
abed
따옴표로 감싼 문자열에 \ 가 있어도 정확하게 뽑아내 보자.<?php
$text = <<<TEXT
<script type="text/javascript">
document.body.innerHTML += "<div style=\"font-size:12px; color:white; background-color:black;\">";
document.body.innerHTML += '\'예제 만들기 귀찮네...\'';
document.body.innerHTML += "</div>";
TEXT;
$cnt = preg_match_all('@(?<!\x5c)([\'"])(.*?)(?<!\x5c)\1@', $text, $matches);
print_r($matches[2]);
?>
$text = <<<TEXT
<script type="text/javascript">
document.body.innerHTML += "<div style=\"font-size:12px; color:white; background-color:black;\">";
document.body.innerHTML += '\'예제 만들기 귀찮네...\'';
document.body.innerHTML += "</div>";
TEXT;
$cnt = preg_match_all('@(?<!\x5c)([\'"])(.*?)(?<!\x5c)\1@', $text, $matches);
print_r($matches[2]);
?>
Array
(
[0] => text/javascript
[1] => <div style=\"font-size:12px; color:white; background-color:black;\">
[2] => \'예제 만들기 귀찮네...\'
[3] => </div>
)
5. 줄바꿈이 \r\n 인지 \n 인지 비교하기 귀찮으므로 [\r\n]+ 혹은(\r?\n) 으로 표현하자.(
[0] => text/javascript
[1] => <div style=\"font-size:12px; color:white; background-color:black;\">
[2] => \'예제 만들기 귀찮네...\'
[3] => </div>
)
6. UTF-8 을 사용한다면 /u modifier 에서 \x{ac00} 같은 표현이 가능해진다.
[\x{ac00}-\x{d7af}] 이렇게 쓰면 [가-
'프로그래밍 > PHP' 카테고리의 다른 글
[본문스크랩] 히치하이커를 위한 PHP 가이드-PHP 5 Data Object (PDO.. (0) | 2010.04.23 |
---|---|
[본문스크랩] [설치/설정] 리눅스php 로 MS-SQL 프로시져를 을 잡자 .. (0) | 2010.04.23 |
[기타] cron을 사용하지않고 화일 캐쉬 (0) | 2010.04.23 |
아이폰 유저에이전트 (USER_AGENT) (0) | 2010.04.16 |
PHP 컨스트럭터와 디스트럭터 (0) | 2010.03.17 |