很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。$ K: |1 l% S0 q( H$ \4 P4 [7 l; N
" ?1 C/ F$ k) T1 P5 N* r
基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。1 D, p7 z5 D x
7 q g" b. M/ y+ F U 惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。9 N9 m: q- g& k1 j- K9 j2 j$ I
& [' j# B$ h7 R& s9 F 当preg_*前往的是null的时分则要留意了,判别因变量是is_null.
# T) ]- ?5 ]8 d1 A( y& L
& y& L4 w/ Q, R2 ~! ~+ X5 X) o/ @ 出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。
; P+ B; G. B% Z" S* j5 c- R- P$ p3 _3 h3 Z+ Y6 U
除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。
/ k2 n0 U+ U9 I! l6 u% R/ A9 m) J% [. G# }
PHP代码: _, s3 y4 j2 y2 y% W# g
2 C. I7 v) T, l1 { if(is_null($tmp)){
: E3 b% A. ~5 t& T& `/ e. n$ m8 P% d3 U- h$ ]& ?( {# b
$error_code=preg_last_error();
2 y5 Y: N; j: A& m/ W. s# q
- p9 K8 g* Q: @ switch($error_code){
0 b( d ]6 |& h y2 O% W3 A# r8 q* Z: o' P6 `
casePREG_NO_ERROR:
) H8 @/ [+ s) J- Z9 _! `) j7 b. L& J6 c; p% }! u4 J% J) P! z& Z4 {
echo\'PREG_NO_ERROR\'; 8 r4 O4 U: ^* W0 \% k
1 ^0 d4 Y: h9 W9 _( Y break;
$ E2 |4 M4 ^& A8 I+ ~9 R
% x6 r; _% }% j( {: r5 z casePREG_INTERNAL_ERROR: m3 F- r" M% C- h3 A2 G4 a+ k R l/ }: H
* l( M& Q4 I6 Q* w; I
echo\'PREG_INTERNAL_ERROR\';
9 [1 k7 |- y) {; `1 L$ [- M& ^( j6 k. P3 L. L( Y
break;
9 x( Q4 J0 c$ j8 c5 G) {8 k4 o% |$ K- k- }; R
casePREG_BACKTRACK_LIMIT_ERROR:
2 G% w4 J! @* G. l6 L3 J" T5 [7 ^/ c( J$ {9 z* b# F
echo\'PREG_BACKTRACK_LIMIT_ERROR\';
8 J$ Y* o( R9 S1 ^# N6 u' W2 j; y4 C% ^/ d9 ]
break; 4 @) _" \3 r; p
3 P( t2 |* k, w$ t8 K casePREG_RECURSION_LIMIT_ERROR:
" Z" Q7 h- }8 ~! L K% x/ p
% u) {3 c: l* q echo\'PREG_RECURSION_LIMIT_ERROR\';
8 |* S- D+ z, c5 X6 t W. d8 {0 U/ r- m0 _' z# }
break;
" X7 S! B$ b, x. K: W0 O8 C$ z- d: J# F
casePREG_BAD_UTF8_ERROR:
( c4 k. @7 ]$ l2 p
: R* B0 v+ |9 k echo\'PREG_BAD_UTF8_ERROR\';
2 l+ _' g# L7 A! Q* p' H$ x
6 ?( D' d! m3 @- c, k6 b& R* ^: O break; . e$ ~# q7 t8 z/ x( N* ]/ F
1 R( E1 K! S' C2 t6 x, u% Q% Q1 P5 @ casePREG_BAD_UTF8_OFFSET_ERROR:
& Q- G3 v- {) n& E6 B
6 k1 O2 G& Z8 t6 G' B/ W echo\'PREG_BAD_UTF8_OFFSET_ERROR\'; - x6 G; e# Q; m3 m
: j* h: \( z' {0 d break; , }4 w7 E& X# b. G6 x% b
: s, [1 w: w% t; w- H- G default: ' [3 K1 X1 t$ ]; R+ t0 Q
6 X6 _+ \; P5 M4 ^ H; @1 t/ E# T echo\'UNKNOWERROR\';
* i/ e. p2 U0 ?* S" v/ \
' d+ ]5 L. ?7 P+ P
% c# n3 O& e3 I4 ^! A. S+ T0 a
8 @6 X/ q- Z; v& e; Z$ y: E exit; 2 l- c( G' r" m- I9 c
$ i) b+ C0 f4 o3 A8 u( _5 l8 D# } }* b* ?& j& w! [9 y1 I1 `9 y; ]8 U
3 N1 k2 i. D0 G7 j6 S' ]' s% p' V
参考材料0 n- S, a9 T/ H
- a6 V- T4 K/ O/ D
1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》/ V. \4 \/ R9 ^1 ^, Y- M
9 K0 @0 V7 Y) C$ E# F4 F! O 2、2011, PHP中文画册 preg_last_error+ ~! t* ]6 }9 f4 r8 P0 c
; X' l# K* h' s' [. E4 ^7 S! C v
( ?* f6 w2 O( Z7 x9 W
% _3 o9 W8 T6 ?- b- x
} |