很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。
1 |. `* C' Y" C/ {. w( @
* l$ c' X# d6 Q, @6 F 基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。& b/ H( { D* b: q" {% X4 T
! v4 z l' m3 H/ | N$ I8 Q
惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。/ e6 b- _ S4 B* w" W# c
4 J; t6 A' w9 v% a
当preg_*前往的是null的时分则要留意了,判别因变量是is_null.4 [* Z+ F4 X% w. I
[, ?& p; q: R9 t D* ^ l3 P
出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。 Q* Q2 u( w5 {6 h& A: G
2 m' Y+ d; U" H# [
除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。7 T- l, K1 ]1 r( ^
8 ^4 T! }8 K6 o2 V0 I
PHP代码8 s& Y& s2 E5 F
" D% T ^, Q2 {$ M* O
if(is_null($tmp)){ + ~% s; m& T. H1 N0 c
! ^. y6 P4 u' P9 T% z" \
$error_code=preg_last_error(); / I! w* y: m5 ]$ H0 z* c, E
7 r9 g: ^, O4 H switch($error_code){
* G3 n& j ^) o$ T* f* s+ x/ F
casePREG_NO_ERROR:
4 y( S+ P: ?: z8 b& ^7 N8 t* f' ]3 |% S0 v' E8 G* ]) M& X
echo\'PREG_NO_ERROR\'; % {1 ^; p T3 h! \3 ~4 b/ ?5 K
( a+ H3 B# q9 n* D8 f% I4 P5 J
break; $ C; |6 |! P+ F9 U
9 f' J3 W0 h; T+ S3 {, \2 f
casePREG_INTERNAL_ERROR:
$ x2 t$ H' D K" O* H6 g" U6 T! B5 Q( O# R. h7 ~! L
echo\'PREG_INTERNAL_ERROR\'; - A- R; E9 ?; z$ ?$ \
3 G6 N; _$ E: f2 c break; & ~8 B) L+ I1 M1 |
# Q; T' ~7 b$ @ O7 O# Z casePREG_BACKTRACK_LIMIT_ERROR:
' q5 i) r) Y4 s6 ?
* ?$ {8 d2 c$ O+ f- M echo\'PREG_BACKTRACK_LIMIT_ERROR\'; , H% P* O0 E" _1 E" F! J9 p3 c! Z
7 y% w: A" i4 J3 k# ~
break;
7 X9 U, n2 j3 r' u8 t
% g0 `" {1 H7 O casePREG_RECURSION_LIMIT_ERROR: ( m, P* Y$ i5 E n: I: g
' O6 \! ^9 S* l+ s. k6 L A( i0 f- P echo\'PREG_RECURSION_LIMIT_ERROR\';
4 }* H; |% E7 Y
7 Z- Y% C# {' y- r# P2 y2 ] break; $ Q7 D- l/ G e4 }% M, j- J
6 e( e; i" g) Q- s casePREG_BAD_UTF8_ERROR:
. A! q5 Z, D9 J
; f2 f. e: n5 E7 X: E echo\'PREG_BAD_UTF8_ERROR\'; 4 Y7 W ]0 U$ N$ q7 c/ m9 u, Y
) w4 F) S" ~2 n% c8 k
break;
% ]/ t" p3 }. d9 p
! f# K5 F3 M* j/ n0 ? casePREG_BAD_UTF8_OFFSET_ERROR: d# h2 ^2 h: z1 z: s% u
( \3 ~! M! g+ H3 c5 c echo\'PREG_BAD_UTF8_OFFSET_ERROR\'; * i% C; M: X9 r
% ^( }; ~- m3 K# n4 M
break;
: e, W" P' `. Y' W" q
6 x, v/ ~8 r# t \/ U& P9 k) a& B default: ( Q, v% w& f/ s7 s+ O! v' v
: G, d) l' e0 d: B1 c" v$ b
echo\'UNKNOWERROR\';
* S' p1 ]) M: b: {& I: e
0 v, A' F3 L$ j: C: Z , w6 x5 I. F+ T0 u/ D6 M ?2 [7 E8 Z( p5 X
$ c; J. @" W- b& w exit; u; U, a) a! w) C: E5 p
& ?/ o: o- K( n, r6 _
}, r$ r0 a: r- @9 z- A* C* }' k
8 n Y2 d r n% ~1 |1 @6 Z; E
参考材料
% r" L8 l% C/ J
" X! S, n+ C" N* N( h, _% Y' u 1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》
! F+ Y/ e7 X! \$ ~3 r
4 f( h, ^6 \2 P/ K/ M6 b 2、2011, PHP中文画册 preg_last_error
: q \- S$ S* q7 j/ _
* z7 Z- @7 E+ P0 f+ K: k! z' D , l9 A& Z6 {3 F& Q0 F
- E7 T$ O- s- }. ^2 A
} |