1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
/* -------------------------------------------------------------------------------------------------
 *   正規表現:preg_last_errorの例
 *   ---------以下の定数のいずれかを返す----------------------------------------------------------
 *   PREG_NO_ERROR              : エラーが存在しなかった場合
 *   PREG_INTERNAL_ERROR        : 内部エラーが発生した場合
 *   PREG_BACKTRACK_LIMIT_ERROR : バックトラック処理の制限値→デフォルト"1000000"
 *   PREG_RECURSION_LIMIT_ERROR : 再帰処理の制限値→デフォルト"100000"
 *   PREG_BAD_UTF8_ERROR        : 壊れている UTF8 データによって直近のエラーが発生した場合
 *   PREG_BAD_UTF8_OFFSET_ERROR : オフセットが妥当なUTF-8コードポイントの開始位置に対応しない場合
 *    (PHP5.3以降)
 *   ---------------------------------------------------------------------------------------------
 *  作成: 2015.07.23 yoshi of CXMedia Inc.
 * ------------------------------------------------------------------------------------------------- */
// 対象文字列に[!?]がなくerror
$str 'teststring whatstring question';
preg_match('/(?:\D+|<\d+>)*[!?]/'$str);
error_check();

// 対象文字列に[!?]があるのでOK
$str 'teststring whatstring question!';
preg_match('/(?:\D+|<\d+>)*[!?]/'$str);
error_check();

// preg処理のエラー判断のユーザ関数
function error_check(){
    if(
preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
        echo 
'エラー:PREG_BACKTRACK_LIMITが発生!<br>';
    }
    else if(
preg_last_error() == PREG_NO_ERROR){
        echo 
'OK:PREGエラー発生なし<br>';
    } else {
        echo 
'エラー:PREG_BACKTRACK_LIMIT以外のエラー発生!<br>';
    }
}
?>