很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。' I. v4 s @: s! U7 H4 V& |* p
% K* \% c. C, O 基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。1 [( n0 y! i6 e% a+ `
, W- ]/ y# Y% n; O' a! d. O$ x7 O' V 惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。
% k ^5 C5 t% f }
, }. p9 R2 q% [: A5 x4 x 当preg_*前往的是null的时分则要留意了,判别因变量是is_null.
5 r7 _+ {5 U& l) |$ g' I; [8 I) q. K
9 \# [! ]3 [0 r. f0 X9 A1 G 出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。) B% Z5 w) a$ S5 q$ G
: d4 H' s- _4 @4 y0 H" v 除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。+ w+ \) z: F# }( F- ]
% J6 n, s# S l+ c) O PHP代码
$ b' I) j+ t& c7 |; B8 e: o8 ^) X2 ^7 h4 n+ c0 A
if(is_null($tmp)){
1 o2 \+ M1 m0 a# A& E# W- l2 D8 S3 f# a4 o( B0 j: g) d9 S; x
$error_code=preg_last_error();
4 e0 @9 ?/ u( J1 @8 x
8 o& j% t4 M w switch($error_code){ - R* d. z! ^9 B1 S2 G( E6 v
) X/ U1 `2 I. D casePREG_NO_ERROR: ; v v& D5 a% L% R: k! O' |/ }* y
6 k- s: a |; ^* L0 d& M s9 e7 M+ S& H
echo\'PREG_NO_ERROR\'; 9 h7 I7 @- s Y" Z7 r, T
4 i7 U& h1 P+ b% ^, Y6 j! G+ Y; V break;
$ a7 @- C" i$ N; L$ l2 X
" o4 T& i8 q5 ~9 o5 Y y" u5 X casePREG_INTERNAL_ERROR:
) z8 K3 X* w2 a( M, s6 h C1 l: |4 d7 ?/ H1 o4 _
echo\'PREG_INTERNAL_ERROR\'; ! ^9 d5 [2 \" x, \' A7 Z' X
7 E( d% A" @0 L' w/ t; f1 i3 p% ]! M break; 5 O3 T2 D; ?. l1 T- `, R
5 v+ m4 Y5 h: k; [, y% R
casePREG_BACKTRACK_LIMIT_ERROR: 5 u/ x$ t5 D. g6 ]( r
+ ~) R; l5 v1 K2 T3 D
echo\'PREG_BACKTRACK_LIMIT_ERROR\'; R v a( ?2 B w' ^3 p+ w
* C3 @+ @5 i/ t/ j
break;
5 [2 R+ Y& T+ N. }' k5 m7 y% ?7 e
casePREG_RECURSION_LIMIT_ERROR: , B# Q& B5 P7 h/ u( D& {: c9 O& _
! a* z; Q/ W9 n& L" J" k/ } echo\'PREG_RECURSION_LIMIT_ERROR\'; 2 r! \: h& h# z" F# D5 L. T; b8 T
" I4 A3 U- ?/ U break;
" u' y" D% B, E2 I; A a% O8 U; k
casePREG_BAD_UTF8_ERROR: 0 y) j- N9 O8 c7 [) k
3 O* T/ ~( U8 p9 S) m7 w! L9 `, v echo\'PREG_BAD_UTF8_ERROR\';
! ], U5 p3 T) e/ c3 u( O) [
# Z$ B B2 F6 j( k& R7 d, H break; * L4 E( j7 ?$ {7 Q7 \- z1 u
) n- n1 [4 C- Q! q1 ` casePREG_BAD_UTF8_OFFSET_ERROR: & o% l4 Q0 G+ u8 f& [
) M8 w, }2 s2 r& M( @' S5 s echo\'PREG_BAD_UTF8_OFFSET_ERROR\';
5 d+ W6 h L( _5 z \
1 o# E9 v0 H" j9 c6 \3 e/ l break;
& ]9 G i* A9 Q3 n: W' u7 z) i! Y b' ^: e* a; O0 w
default:
7 |8 \4 y8 n$ @$ W: D
, W) ~+ D2 G+ w5 j% N* _3 l echo\'UNKNOWERROR\'; & a9 o- l; [% d1 B' V
2 v: g7 r J# }" @. m" t: G x
0 J4 y' ^8 ]2 q7 }8 \
# q9 G3 l0 I% ~ exit; $ M# a, `7 j) f0 K1 k1 J n/ f. f( s: {
3 `) i" L+ n0 J7 g }; d. i2 R! Q( C4 d* T! q& ^3 i) s
. H- J5 E# w# I5 e, {% _9 S6 m5 i! v 参考材料8 a1 h1 G, t4 R- U# q2 `
" S2 }7 X& Q) U9 N, c5 u4 C 1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》
$ R+ r( B+ E( k; [
& S0 [& U y8 l( w5 b 2、2011, PHP中文画册 preg_last_error
( v7 N; z4 c% J1 F8 {, g, H" w2 f& R! u. V: W1 Q, T# k
9 w: I p9 M& g0 C' K
) _) Z* V1 U4 b$ h; @
} |