很久没有遇上PHP难点了,这次正则成绩占了小半工夫,还是老成绩最大回溯、递归制约成绩。进修透以后实在并没有难修正调剂有这类成绩的正则。次要是以次多少点。1 X+ g5 R5 ~; C6 A+ W; H
! M* K* [) j7 S* a# s1 X 基于正则抒发式交换的沙盘引擎很简单遇上正则抒发式最大回溯/递归的制约。: J/ h6 O) ^# }+ n% r% x
) _/ @/ M0 E/ p1 P0 l0 L% M 惰性婚配并没有可怜,畸形状况下沙盘并没有会没有够用,常常没有会超过制约,discuz的沙盘引擎就少量运用了。然而因而而没有离开意、没有去进修,则简单书写谬误并遇上成绩。* ~, Y9 _) C& D. Z
2 l$ j" G& ^3 Q& ^8 p
当preg_*前往的是null的时分则要留意了,判别因变量是is_null.
& n: R" ?$ Y! q7 v
9 Z4 s ?$ i9 |" M3 R8 i 出错并没有可怜,然而最好把谬误都完好的输入,那样调剂就很简单了。
7 u% m* v* a1 f& Y% g1 Q
7 d! l3 d) N' [7 P. u' I: f 除非输入出错缘由,还要输入婚配的文本和运用的正则,那样就很简单调剂了。
2 U9 F/ }. o/ |$ R6 E1 z; P/ L. H* P3 K1 k* d% O5 e2 |
PHP代码# L9 l3 s! ^/ [6 t0 ^
/ |% T1 J: e! @3 n2 Y2 T
if(is_null($tmp)){
; O: c$ S& P5 E6 g2 |9 v7 h8 {9 C; o j A7 o
$error_code=preg_last_error();
: y$ V" f8 l$ w. ~4 B# U" w
. H0 ]9 {: }& }+ C2 c2 i" O6 p5 S N switch($error_code){
2 D( k8 o7 N+ L, |- f; x, \# I) }. l, |% m* o' M! N( V. a* `. |
casePREG_NO_ERROR: ! k! ]6 H" W2 o$ Y
, {& F( ?8 e5 x( b! Q echo\'PREG_NO_ERROR\'; % X5 G3 q& \1 V) T' Z g* c
" [# m( r& f+ W& C3 I2 w, F) z' ^ break; & L7 e# c* Y* B1 L( e. g
7 g+ Z8 O# ~' W X2 w
casePREG_INTERNAL_ERROR:
0 L8 w9 Z- \! A7 h& V7 h2 D( c) E9 T0 ]4 F7 {# q
echo\'PREG_INTERNAL_ERROR\';
- ?; g9 z6 t3 d7 t/ G. ]9 q4 K y% o# _- Y
break;
2 |. _- @7 R3 a3 C. v
* {3 j: P6 d/ {# n% S, L( y casePREG_BACKTRACK_LIMIT_ERROR:
0 K$ |5 B0 s. z# C
; I$ V. t- k; {; ~3 t echo\'PREG_BACKTRACK_LIMIT_ERROR\'; G1 Z0 R5 l( Y+ Q7 M( W! G
# m. c1 z# G0 e1 x& D break;
1 \' u( v% q% q9 g
! \. `7 G, {. W& { A casePREG_RECURSION_LIMIT_ERROR:
6 P2 F |4 C4 J# \2 w$ d. e8 d) M- V% z
echo\'PREG_RECURSION_LIMIT_ERROR\';
4 y' a; z# I- O! [2 ^; i/ l5 \2 r1 Y" }7 n5 o2 ^, V
break; + V; R# B# [8 V
2 ~: p z* r5 O; t1 q7 f8 C4 D
casePREG_BAD_UTF8_ERROR:
3 M1 R" L3 b) E6 d5 @& N/ h% {9 \" B
echo\'PREG_BAD_UTF8_ERROR\'; / O* ?7 ^# _( `& o3 `
; `# j3 ~5 B& ]$ R) Y+ P break;
4 z3 d, s- W! P6 f4 q. _: v, _! ^' m* F1 K R5 |
casePREG_BAD_UTF8_OFFSET_ERROR: 6 J1 ?5 X, }, X1 k
/ f. G7 }8 C+ \3 c3 h
echo\'PREG_BAD_UTF8_OFFSET_ERROR\';
5 D8 o. |- @9 a1 i4 e$ I6 e) @* ^' A9 H6 G
break; ( w3 _) u$ E8 S$ d9 @1 v3 B- U% z
+ ^1 h7 ?% p# h6 _& X4 H
default:
5 [; l, V5 d# g3 d% r0 v
' B- ~# @: z( S$ ` echo\'UNKNOWERROR\';
5 E8 [/ `, r5 H7 I! x
2 v5 R$ P0 r+ u/ C ( D" ]! V. X. T4 s, n3 J7 e4 \
8 K& V2 J, _, } q exit;
: A6 f" x& I6 E+ y: d3 P' D0 ^/ j0 p9 t) c a2 i& c
}
- `* d' Z. h; W: G
( o- R1 z/ y# G. y# N* N 参考材料1 p% Q2 [- X$ d3 ~/ \3 ^
1 j% Q. X4 V* ]
1、2010, Laruence 《深悉正则(pcre)最大回溯/递归制约》
6 h1 s% Q1 M# I, C6 y* B& ^! [4 B, s" K+ V% Y* u$ n; J# O/ t- f
2、2011, PHP中文画册 preg_last_error
9 _ G: K# a+ D2 a; ~6 k' R" s D* p$ g4 ^
/ e# P, C/ c7 w k! Y9 ^ r3 i! N5 Y1 n( p3 M5 x$ K
} |