很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。. L' H/ ~2 X: }; ~$ l& j5 H3 i/ v
" h; j& s. S @ 基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。' l0 P/ s- P$ L9 O
) }& t! h. `- G8 p; s9 P
惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。
$ x3 B6 v8 ]( r: I/ e) i5 |& G% L3 ?% i' O
当preg_*前往的是null的时分则要留意了,判别因变量是is_null.; I4 h* a# ]; M
1 _" O" m9 X0 r, Q: `# j, G2 z
出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。
3 E9 a8 d G0 E# h3 T7 U5 Q/ h( |8 B- v: b
除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。5 ?" V+ X! ^" _; k' L2 G
2 ^8 }: | t% J8 C# V9 w PHP代码7 h) D, P6 b9 o* r5 P" e
4 k3 h' g* j- m$ L9 ~, A& I0 o% u if(is_null($tmp)){ 7 t1 F( l" [4 B
8 F0 s/ J+ t2 X1 _
$error_code=preg_last_error(); : V6 L, `! l ?
) E: Q; j8 e, t( j
switch($error_code){ 1 Q% x- @& c& r" w8 U
6 ]1 e2 Z; E. c& v' T casePREG_NO_ERROR:
/ _, B5 r5 N8 Y+ s/ W( Y! g" r
6 C: F5 m1 x( B/ t) ?& @: T" G4 B echo\'PREG_NO_ERROR\'; 2 y8 F" I8 d+ \! {+ q. Y
8 r6 F! w; \( D7 n7 o% k( i& b. p break; 9 ?: v* A* z' h/ L1 b, O3 M8 K) L
- p8 [, N" y7 G* h casePREG_INTERNAL_ERROR: 4 B7 T9 D, u" A9 B, f) v
, n6 J, q! V, W( h! X
echo\'PREG_INTERNAL_ERROR\';
$ W2 k9 b6 W5 A: m' S
; A- Q/ q$ e& u$ u0 R break;
; K5 b) |; Y9 K, U3 }! G/ b5 F: @6 ?" p0 C
casePREG_BACKTRACK_LIMIT_ERROR:
: s$ ^& ~* i+ I! W6 r/ x$ Y( W+ c% m2 ]0 i! c
echo\'PREG_BACKTRACK_LIMIT_ERROR\';
5 Y/ d: k3 n. x$ t/ W) S
/ U' s7 h; q3 f q1 D+ _ break; 2 [" x6 l+ o" I3 y
" w/ d# l$ w4 N# a( K! ]/ ? casePREG_RECURSION_LIMIT_ERROR: , V. G/ N) i" v' S \& c; U/ M' X: |
1 j; p7 c* P) y* E3 N echo\'PREG_RECURSION_LIMIT_ERROR\'; 7 o+ z, H$ [2 X4 Y& t* k
' g$ L! J- i, {6 z4 W! Y5 y break;
7 q; Z; z, \) b7 U( V! e! r
- o" z$ t1 q, t _$ y% z/ z casePREG_BAD_UTF8_ERROR:
& U) j w; F9 y- {7 ]
# x3 o) v0 O1 j0 Z echo\'PREG_BAD_UTF8_ERROR\';
& _% o! o4 ~& q7 h
# Q* ~- v( @( g* c/ I$ z* m break;
4 E8 f- s4 q1 @0 v% i! N5 _1 B) ^/ S1 u. C5 h( p* @
casePREG_BAD_UTF8_OFFSET_ERROR: & Z& G! P8 B& p4 W/ B$ }! M$ X
7 R: m7 L- Y( @( H+ y
echo\'PREG_BAD_UTF8_OFFSET_ERROR\'; # W- B! t$ X0 E) m
\# {# h G1 p break; 3 b5 k8 u9 }& ]! q' J, v8 j
" f+ N0 O; L% I( \
default:
7 c- x% X' s) ?
. ]2 u3 j% R4 x* O; K5 S+ Y echo\'UNKNOWERROR\';
k: {' j5 o8 L& q+ v( K a$ L3 R, x7 s) |9 g3 W. P% L
+ B/ c. T- C6 d- k. K
& b- d; W# u7 a) R4 C7 v& N, l exit;
$ s. D4 u' D. x- U3 F( k
5 H/ z0 B3 r5 g0 y) ?* y# U }
. C h: ?# b' T# ~: i: P# U3 C5 F2 `, |( N0 ?; X
参考材料
+ D2 _7 r) k4 b* _; f( G6 M
, Q8 _" n# p% z {, T; Q+ u* T 1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》9 C4 P6 m, x+ v9 Y) f
5 h; N1 G$ P% g/ b/ Z$ S4 X 2、2011, PHP中文画册 preg_last_error
6 \0 F6 M8 v7 P! p1 V' q/ x1 Q/ e! D7 U$ t2 p
0 n& T# I; g& I: M, Q. r& L' N# n# y% E
} |