<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8"><meta name="generator" content="pdf2htmlEX"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/css/base.min.css"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/css/fancy.min.css"><link rel="stylesheet" href="https://csdnimg.cn/release/download_crawler_static/1597729/raw.css"><script src="https://csdnimg.cn/release/download_crawler_static/js/compatibility.min.js"></script><script src="https://csdnimg.cn/release/download_crawler_static/js/pdf2htmlEX.min.js"></script><script>try{pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});}catch(e){}</script><title></title></head><body><div id="sidebar" style="display: none"><div id="outline"></div></div><div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/1597729/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Perl<span class="_ _0"> </span><span class="ff2">正则表达式讲解</span> </div><div class="t m0 x2 h3 y2 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _1"> </span><span class="ff4 fs2">摘自<span class="fs1">《</span></span>Perl<span class="_ _2"> </span><span class="ff4">编程详解》</span> </div><div class="t m0 x2 h3 y3 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y4 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 ls0">目录:<span class="ff3"> </span></span></div><div class="t m0 x2 h3 y5 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> </span>1</span></div><div class="t m0 x3 h3 y6 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y7 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 2</span></span></div><div class="t m0 x3 h3 y8 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y9 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 3</span></span></div><div class="t m0 x3 h3 ya ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yb ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 4</span></span></div><div class="t m0 x3 h3 yc ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yd ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 5</span></span></div><div class="t m0 x3 h3 ye ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yf ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 6</span></span></div><div class="t m0 x3 h3 y10 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y11 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 7</span></span></div><div class="t m0 x3 h3 y12 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y13 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则<span class="ff3"> 8</span></span></div><div class="t m0 x3 h3 y14 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y15 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">原则概括</span></div><div class="t m0 x4 h3 y16 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y17 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">正则表达式修饰符</span></div><div class="t m0 x5 h3 y18 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y19 ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">匹配和<span class="ff3"> g </span>运算符</span></div><div class="t m0 x6 h3 y1a ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y1b ff3 fs1 fc0 sc0 ls1 ws0"> <span class="ff4 fc1 ls0">修饰符和环境</span></div><div class="t m0 x7 h3 y1c ff3 fs1 fc0 sc0 ls0 ws0"> </div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div></body></html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/1597729/bg2.jpg"><div class="t m0 x2 h3 y1d ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y1e ff3 fs1 fc0 sc0 ls0 ws0">9</div><div class="t m0 x2 h3 y1f ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _3"></span>9</div><div class="t m0 x2 h3 y1e ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 x8 h4 y1f ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 x8 h3 y1e ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3">3</span></div><div class="t m0 x9 h3 y1f ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x9 h3 y1e ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 xa h4 y1f ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 xa h4 y1e ff4 fs1 fc0 sc0 ls2 ws0">.1</div><div class="t m0 xb h4 y1f ff4 fs1 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>1</div><div class="t m0 xb h4 y1e ff4 fs1 fc0 sc0 ls3 ws0">1原<span class="_ _6"></span>则</div><div class="t m0 xc h4 y1f ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _7"></span>原则</div><div class="t m0 xc h3 y1e ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _2"> </span>1<span class="ff3 ls0"> </span></div><div class="t m0 x2 h3 y20 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">正则表达式有三种形式:匹配、替换和转换。</span> </div><div class="t m0 x2 h3 y21 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">在表</span> 9-<span class="ff4">1</span> <span class="ff4">中列有三种正则表达式运算符。</span> </div><div class="t m0 xd h3 y22 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yd ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">接下来对每一个表达式给出详尽解释。</span> </div><div class="t m0 x2 h3 y23 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">匹配:</span>m/<regexp>/<span class="ff4">这种形式<span class="_ _8"></span>表明在<span class="ff3">//</span>内部<span class="_ _8"></span>的正则表达将用<span class="_ _8"></span>于匹配<span class="ff3 ls5 ws1"> = ~</span>或<span class="ff3 ws2"> !~</span>左边的标<span class="_ _8"></span>量。</span></div><div class="t m0 x2 h3 y24 ff4 fs1 fc0 sc0 ls0 ws0">为了语法上的简化用<span class="ff3">/<regexp>/</span>,略去<span class="_ _2"> </span><span class="ff3">m</span>。<span class="ff3"> </span></div><div class="t m0 x2 h3 y25 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls6">替换:</span>s/<regexp>/<span class="_ _8"></span><substituteT<span class="_ _8"></span>ext>/<span class="_ _9"></span><span class="ff4 ls6">这种形式表明正则表达式</span><regexp><span class="_ _9"></span><span class="ff4 ls6">将被文本</span></div><div class="t m0 x2 h3 y26 ff3 fs1 fc0 sc0 ls0 ws0"><substituteText><span class="ff4">替换,为了语法的简化用</span>/<regexp>/<substituteText><span class="ff4">略去<span class="_ _2"> </span></span>s<span class="ff4">。</span> </div><div class="t m0 x2 h3 y27 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls7">·转换:</span>tr/<c<span class="_ _8"></span>harClass>/<<span class="_ _8"></span>substituteCl<span class="_ _8"></span>ass>/<span class="_ _4"></span><span class="ff4 ls7">这种</span></div><div class="t m0 x2 h3 y28 ff4 fs1 fc0 sc0 ls8 ws0">形式包含一系列的字符<span class="_ _8"></span>—<span class="ff3 ls0">/<charClas<span class="_ _8"></span>s><span class="_ _4"></span><span class="ff4 ls8">—同时把它们替</span></span></div><div class="t m0 x2 h3 y29 ff4 fs1 fc0 sc0 ls0 ws0">换为<span class="ff3"><substituteClass></span>。<span class="ff3"> </span></div><div class="t m0 x2 h3 y2a ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">注意转换</span><tr><span class="ff4">并不真正是一个正<span class="_ _8"></span>则表达式,<span class="_ _a"></span>但是对于</span></div><div class="t m0 x2 h4 y2b ff4 fs1 fc0 sc0 ls2 ws0">用正则表达式难于处理的<span class="_ _8"></span>数据常使用它来进行操纵<span class="_ _8"></span>。因</div><div class="t m0 x2 h3 y2c ff4 fs1 fc0 sc0 ls0 ws0">此,<span class="ff3">tr/[0-9]/9<span class="_ _8"></span>8765432<span class="ff4">1</span><span class="ls5">0.</span><span class="ff4">组成<span class="_ _b"> </span>1</span>223456789<span class="_ _8"></span><span class="ff4">,<span class="ff3">98765432</span>1</span></span></div><div class="t m0 x2 h3 y2d ff4 fs1 fc0 sc0 ls0 ws0">等字符串。<span class="ff3"> </span></div><div class="t m0 x2 h3 y2e ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls2">通过使用=</span>~(<span class="_ _4"></span><span class="ff4 ls2">用英语讲</span>:does<span class="_ _4"></span><span class="ff4 ls2">,与“进行匹<span class="_"> </span>配”同</span>)</div><div class="t m0 x2 h3 y2f ff4 fs1 fc0 sc0 ls0 ws0">和<span class="ff3">!~(</span>英语<span class="ff3">:does<span class="_ _8"></span>n't<span class="ff4">,<span class="_ _8"></span>与<span class="_ _c"></span>“不匹配”<span class="_ _c"></span>同<span class="ff3">)</span><span class="ls5">把这些表达式捆<span class="_ _4"></span>绑</span></span></span></div><div class="t m0 x2 h4 y30 ff4 fs1 fc0 sc0 ls5 ws0">到标量上。<span class="_"> </span>作为这种类型的例子,<span class="_ _8"></span>下面我们给出六个<span class="_ _4"></span>示例</div><div class="t m0 x2 h3 y31 ff4 fs1 fc0 sc0 ls0 ws0">正则表达式及相应的定义:<span class="ff3"> </span></div><div class="t m0 x2 h5 y32 ff3 fs2 fc0 sc0 ls9 ws0">$scalar</div><div class="t m0 x2 h5 y33 ff3 fs2 fc0 sc0 ls9 ws0">$scalar<span class="_ _d"></span>$scalar</div><div class="t m0 x2 h5 y32 ff3 fs2 fc0 sc0 ls9 ws0">$scalarName =~ s/a/b;</div><div class="t m0 xb h5 y33 ff3 fs2 fc0 sc0 ls9 ws0">Name =~ s/a/b;<span class="_ _e"></span>Name =~ s/a/b;</div><div class="t m0 xb h5 y32 ff3 fs2 fc0 sc0 ls9 ws0">Name =~ s/a/b; </div><div class="t m0 xe h5 y33 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 xe h5 y32 ff3 fs2 fc0 sc0 lsa ws3"> <span class="_ _10"> </span> <span class="_ _11"> </span> <span class="_ _11"> </span> <span class="_ _9"> </span># substitute the ch<span class="_ _8"></span>aracte<span class="_ _8"></span>r a for b, and retur<span class="_ _8"></span>n true if this ca<span class="_ _8"></span>n happern</div><div class="t m0 x7 h5 y33 ff3 fs2 fc0 sc0 lsa ws3"> <span class="_ _11"> </span> <span class="_ _11"> </span> <span class="_ _9"> </span># substitute the ch<span class="_ _8"></span>aracte<span class="_ _8"></span>r a for b, and retur<span class="_ _8"></span>n true if this ca<span class="_ _8"></span>n happern<span class="_ _12"></span> <span class="_ _11"> </span> <span class="_ _11"> </span> <span class="_ _9"> </span># substitute the ch<span class="_ _8"></span>aracte<span class="_ _8"></span>r a for b, and retur<span class="_ _8"></span>n true if this ca<span class="_ _8"></span>n happern</div><div class="t m0 x7 h5 y32 ff3 fs2 fc0 sc0 lsa ws3"> <span class="_ _11"> </span> <span class="_ _11"> </span> <span class="_ _9"> </span># substitute the ch<span class="_ _8"></span>aracte<span class="_ _8"></span>r a for b, and retur<span class="_ _8"></span>n true if this ca<span class="_ _8"></span>n happern </div><div class="t m0 xf h5 y33 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 xf h5 y32 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y34 ff3 fs2 fc0 sc0 ls9 ws0">$scalarName =~ m/a;</div><div class="t m0 x2 h5 y35 ff3 fs2 fc0 sc0 ls9 ws0">$scalarName =~ m/a;<span class="_ _13"></span>$scalarName =~ m/a;</div><div class="t m0 x2 h5 y34 ff3 fs2 fc0 sc0 ls9 ws0">$scalarName =~ m/a; </div><div class="t m0 x10 h5 y35 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x10 h5 y34 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _14"> </span> # does the scalar $scalarName have an a in it?</div><div class="t m0 x7 h5 y35 ff3 fs2 fc0 sc0 ls9 ws0"> # does the scalar $scalarName have an a in it?<span class="_ _15"></span> # does the scalar $scalarName have an a in it?</div><div class="t m0 x7 h5 y34 ff3 fs2 fc0 sc0 ls9 ws0"> # does the scalar $scalarName have an a in it? </div><div class="t m0 x11 h5 y35 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x11 h5 y34 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y36 ff3 fs2 fc0 sc0 lsa ws4">$scalarN<span class="_ _8"></span>ame =~ tr/A</div><div class="t m0 x2 h5 y37 ff3 fs2 fc0 sc0 lsa ws4">$scalarN<span class="_ _8"></span>ame =~ tr/A<span class="_ _16"></span>$scalarN<span class="_ _8"></span>ame =~ tr/A</div><div class="t m0 x2 h5 y36 ff3 fs2 fc0 sc0 lsa ws4">$scalarN<span class="_ _8"></span>ame =~ tr/A-</div><div class="t m0 x12 h5 y37 ff3 fs2 fc0 sc0 ls0 ws0">-<span class="_ _f"></span>-</div><div class="t m0 x12 h5 y36 ff3 fs2 fc0 sc0 lsb ws0">-Z<span class="_ _8"></span>/a</div><div class="t m0 x13 h5 y37 ff3 fs2 fc0 sc0 lsc ws0">Z/a<span class="_ _17"></span>Z/a</div><div class="t m0 x13 h5 y36 ff3 fs2 fc0 sc0 lsc ws0">Z/a<span class="_ _4"></span>-</div><div class="t m0 x14 h5 y37 ff3 fs2 fc0 sc0 ls0 ws0">-<span class="_ _f"></span>-</div><div class="t m0 x14 h5 y36 ff3 fs2 fc0 sc0 lsa ws4">-z/; <span class="_ _9"> </span> <span class="_ _11"> </span># transl<span class="_ _8"></span>ate all cap<span class="_ _8"></span>ital le<span class="_ _8"></span>tter with lo<span class="_ _8"></span>wer case on<span class="_ _8"></span>es, and retu<span class="_ _8"></span>r</div><div class="t m0 x7 h5 y37 ff3 fs2 fc0 sc0 lsa ws4">z/; <span class="_ _9"> </span> <span class="_ _9"> </span># translate al<span class="_ _8"></span>l capital<span class="_ _8"></span> letter wi<span class="_ _8"></span>th lower cas<span class="_ _8"></span>e ones, and re<span class="_ _8"></span>tur<span class="_ _18"></span>z/; <span class="_ _9"> </span> <span class="_ _9"> </span># translate al<span class="_ _8"></span>l capital<span class="_ _8"></span> letter wi<span class="_ _8"></span>th lower cas<span class="_ _8"></span>e ones, and re<span class="_ _8"></span>tur</div><div class="t m0 x7 h5 y36 ff3 fs2 fc0 sc0 lsa ws4">z/; <span class="_ _9"> </span> <span class="_ _9"> </span># translate al<span class="_ _8"></span>l capital<span class="_ _8"></span> letter wi<span class="_ _8"></span>th lower cas<span class="_ _8"></span>e ones, and re<span class="_ _8"></span>turn ture </div><div class="t m0 x15 h5 y37 ff3 fs2 fc0 sc0 lsa ws4">n ture<span class="_ _8"></span> <span class="_ _19"></span>n ture<span class="_ _8"></span> </div><div class="t m0 x15 h5 y36 ff3 fs2 fc0 sc0 lsa ws4">n ture<span class="_ _8"></span> </div><div class="t m0 x2 h5 y38 ff3 fs2 fc0 sc0 ls9 ws0">if this happens</div><div class="t m0 x2 h5 y39 ff3 fs2 fc0 sc0 ls9 ws0">if this happens<span class="_ _1a"></span>if this happens</div><div class="t m0 x2 h5 y38 ff3 fs2 fc0 sc0 ls9 ws0">if this happens </div><div class="t m0 x16 h5 y39 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x16 h5 y38 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y3a ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ s/a/b/;</div><div class="t m0 x2 h5 y3b ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ s/a/b/;<span class="_ _1b"></span>$scalarName !~ s/a/b/;</div><div class="t m0 x2 h5 y3a ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ s/a/b/; </div><div class="t m0 x17 h5 y3b ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x17 h5 y3a ff3 fs2 fc0 sc0 lsc ws5"> <span class="_ _1c"></span> # substit<span class="_ _4"></span>ute the ch<span class="_ _4"></span>aracte<span class="_ _4"></span>r a for b, and re<span class="_ _4"></span>turn fal<span class="_ _4"></span>se if this<span class="_ _4"></span> indee<span class="_ _4"></span>d </div><div class="t m0 x7 h5 y3b ff3 fs2 fc0 sc0 lsc ws5"> # substit<span class="_ _4"></span>ute the ch<span class="_ _4"></span>aracte<span class="_ _4"></span>r a for b, and re<span class="_ _4"></span>turn fal<span class="_ _4"></span>se if this<span class="_ _4"></span> indee<span class="_ _4"></span>d <span class="_ _1d"></span> # substit<span class="_ _4"></span>ute the ch<span class="_ _4"></span>aracte<span class="_ _4"></span>r a for b, and re<span class="_ _4"></span>turn fal<span class="_ _4"></span>se if this<span class="_ _4"></span> indee<span class="_ _4"></span>d </div><div class="t m0 x7 h5 y3a ff3 fs2 fc0 sc0 lsc ws5"> # substit<span class="_ _4"></span>ute the ch<span class="_ _4"></span>aracte<span class="_ _4"></span>r a for b, and re<span class="_ _4"></span>turn fal<span class="_ _4"></span>se if this<span class="_ _4"></span> indee<span class="_ _4"></span>d </div><div class="t m0 x2 h5 y3c ff3 fs2 fc0 sc0 ls9 ws0">happens.</div><div class="t m0 x2 h5 y3d ff3 fs2 fc0 sc0 ls9 ws0">happens.<span class="_ _1e"></span>happens.</div><div class="t m0 x2 h5 y3c ff3 fs2 fc0 sc0 ls9 ws0">happens. </div><div class="t m0 x18 h5 y3d ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x18 h5 y3c ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y3e ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ m/a/;</div><div class="t m0 x2 h5 y3f ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ m/a/;<span class="_ _1f"></span>$scalarName !~ m/a/;</div><div class="t m0 x2 h5 y3e ff3 fs2 fc0 sc0 ls9 ws0">$scalarName !~ m/a/; </div><div class="t m0 x19 h5 y3f ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x19 h5 y3e ff3 fs2 fc0 sc0 lsa ws0"> <span class="_ _20"> </span> <span class="_ _8"></span> # <span class="_ _a"></span>does <span class="_ _21"></span>the <span class="_ _a"></span>scalar <span class="_ _a"></span>$scalarName <span class="_ _a"></span>match <span class="_ _a"></span>the <span class="_ _21"></span>charac<span class="_ _8"></span>ter <span class="_ _a"></span>a? <span class="_ _21"></span>Return <span class="_ _a"></span>false </div><div class="t m0 x7 h5 y3f ff3 fs2 fc0 sc0 lsa ws0"> <span class="_ _8"></span> # <span class="_ _a"></span>does <span class="_ _21"></span>the <span class="_ _a"></span>scalar <span class="_ _a"></span>$scalarName <span class="_ _a"></span>match <span class="_ _a"></span>the <span class="_ _21"></span>charac<span class="_ _8"></span>ter <span class="_ _a"></span>a? <span class="_ _21"></span>Return <span class="_ _a"></span>false <span class="_ _1d"></span> <span class="_ _8"></span> # <span class="_ _a"></span>does <span class="_ _a"></span>the <span class="_ _21"></span>scalar <span class="_ _a"></span>$scalar<span class="_ _8"></span>Name <span class="_ _21"></span>mat<span class="_ _8"></span>ch <span class="_ _21"></span>the <span class="_ _a"></span>characte<span class="_ _8"></span>r <span class="_ _21"></span>a? <span class="_ _21"></span>Retu<span class="_ _8"></span>rn <span class="_ _21"></span>false<span class="_ _8"></span> </div><div class="t m0 x7 h5 y3e ff3 fs2 fc0 sc0 lsa ws0"> <span class="_ _8"></span> # <span class="_ _a"></span>does <span class="_ _21"></span>the <span class="_ _a"></span>scalar <span class="_ _a"></span>$scalarName <span class="_ _a"></span>match <span class="_ _a"></span>the <span class="_ _21"></span>charac<span class="_ _8"></span>ter <span class="_ _a"></span>a? <span class="_ _21"></span>Return <span class="_ _a"></span>false </div><div class="t m0 x2 h5 y40 ff3 fs2 fc0 sc0 ls9 ws0">if it does.</div><div class="t m0 x2 h5 y41 ff3 fs2 fc0 sc0 ls9 ws0">if it does.<span class="_ _22"></span>if it does.</div><div class="t m0 x2 h5 y40 ff3 fs2 fc0 sc0 ls9 ws0">if it does. </div><div class="t m0 x1a h5 y41 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1a h5 y40 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y42 ff3 fs2 fc0 sc0 ls9 ws6">$scalarName !~ tr/0</div><div class="t m0 x2 h5 y43 ff3 fs2 fc0 sc0 ls9 ws6">$scalarName !~ tr/0<span class="_ _13"></span>$scalarName !~ tr/0</div><div class="t m0 x2 h5 y42 ff3 fs2 fc0 sc0 ls9 ws6">$scalarName !~ tr/0-</div><div class="t m0 x10 h5 y43 ff3 fs2 fc0 sc0 ls0 ws0">-<span class="_ _f"></span>-</div><div class="t m0 x10 h5 y42 ff3 fs2 fc0 sc0 ls9 ws0">-9/a</div><div class="t m0 x19 h5 y43 ff3 fs2 fc0 sc0 ls9 ws0">9/a<span class="_ _23"></span>9/a</div><div class="t m0 x19 h5 y42 ff3 fs2 fc0 sc0 ls9 ws0">9/a-</div><div class="t m0 x1b h5 y43 ff3 fs2 fc0 sc0 ls0 ws0">-<span class="_ _f"></span>-</div><div class="t m0 x1b h5 y42 ff3 fs2 fc0 sc0 ls9 ws0">-j/;</div><div class="t m0 x1c h5 y43 ff3 fs2 fc0 sc0 ls9 ws0">j/;<span class="_ _23"></span>j/;</div><div class="t m0 x1c h5 y42 ff3 fs2 fc0 sc0 lsa ws7">j/;<span class="_ _4"></span> <span class="_ _9"> </span> <span class="_ _9"> </span> <span class="_ _9"></span># t<span class="_ _8"></span>ranslat<span class="_ _8"></span>e the di<span class="_ _8"></span>gits fo<span class="_ _8"></span>r the l<span class="_ _8"></span>etters <span class="_ _8"></span>a thru j,<span class="_ _8"></span> and ret<span class="_ _8"></span>urn fals<span class="_ _8"></span>e </div><div class="t m0 x1d h5 y43 ff3 fs2 fc0 sc0 lsa ws7"> <span class="_ _9"></span> <span class="_ _9"></span> <span class="_ _24"></span># trans<span class="_ _8"></span>late the <span class="_ _8"></span>digits <span class="_ _8"></span>for the l<span class="_ _8"></span>etters <span class="_ _8"></span>a thru j,<span class="_ _8"></span> and <span class="_ _8"></span>return f<span class="_ _8"></span>alse <span class="_ _25"></span> <span class="_ _9"></span> <span class="_ _24"></span> <span class="_ _9"> </span># trans<span class="_ _8"></span>late the <span class="_ _8"></span>digits <span class="_ _8"></span>for the l<span class="_ _8"></span>etters <span class="_ _8"></span>a thru j,<span class="_ _8"></span> and <span class="_ _8"></span>return f<span class="_ _8"></span>alse </div><div class="t m0 x1d h5 y42 ff3 fs2 fc0 sc0 lsa ws7"> <span class="_ _9"></span> <span class="_ _24"></span> <span class="_ _9"> </span># trans<span class="_ _8"></span>late the <span class="_ _8"></span>digits <span class="_ _8"></span>for the l<span class="_ _8"></span>etters <span class="_ _8"></span>a thru j,<span class="_ _8"></span> and <span class="_ _8"></span>return f<span class="_ _8"></span>alse </div><div class="t m0 x2 h5 y44 ff3 fs2 fc0 sc0 ls9 ws0">if this happens.</div><div class="t m0 x2 h5 y45 ff3 fs2 fc0 sc0 ls9 ws0">if this happens.<span class="_ _26"></span>if this happens.</div><div class="t m0 x2 h5 y44 ff3 fs2 fc0 sc0 ls9 ws0">if this happens. </div><div class="t m0 x1e h5 y45 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1e h5 y44 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y46 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">如果我们输入像</span> horned toad =~ m/toad/ <span class="ff4">这样的代码,则出现图</span> 9-<span class="ff4">1</span> <span class="ff4">所示情况:</span> </div><div class="t m0 x2 h3 y47 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">另外,如果读<span class="_ _4"></span>者正在对特<span class="_ _4"></span>定变量</span> $_ <span class="ff4">进行匹配</span>(<span class="_ _8"></span><span class="ff4">读者可能在<span class="_ _27"> </span><span class="ff3">while<span class="_ _2"> </span></span>循环,<span class="ff3 ls5">map<span class="_ _b"> </span></span>或<span class="_ _27"> </span><span class="ff3">grep<span class="_ _27"> </span></span>中</span></div><div class="t m0 x2 h3 y48 ff4 fs1 fc0 sc0 ls0 ws0">使用<span class="ff3">)</span>,则可以不用<span class="ff3">!~</span>和<span class="ff3">=~</span>。因而,以下所有代码都会合法:<span class="ff3"> </span></div><div class="t m0 x2 h5 y49 ff3 fs2 fc0 sc0 ls9 ws0">my @elemente = (' al' ,' a2' ,</div><div class="t m0 x2 h5 y4a ff3 fs2 fc0 sc0 ls9 ws0">my @elemente = (' al' ,' a2' ,<span class="_ _28"></span>my @elemente = (' al' ,' a2' ,</div><div class="t m0 x2 h5 y49 ff3 fs2 fc0 sc0 ls9 ws0">my @elemente = (' al' ,' a2' ,' a3' ,' a4' ,' a5' );</div><div class="t m0 x1f h5 y4a ff3 fs2 fc0 sc0 ls9 ws0">' a3' ,' a4' ,' a5' );<span class="_ _1b"></span>' a3' ,' a4' ,' a5' );</div><div class="t m0 x1f h5 y49 ff3 fs2 fc0 sc0 ls9 ws0">' a3' ,' a4' ,' a5' ); </div><div class="t m0 x20 h5 y4a ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x20 h5 y49 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y4b ff3 fs2 fc0 sc0 ls9 ws0">foreach (@elements) {s/a/b/;}</div><div class="t m0 x2 h5 y4c ff3 fs2 fc0 sc0 ls9 ws0">foreach (@elements) {s/a/b/;}<span class="_ _29"></span>foreach (@elements) {s/a/b/;}</div><div class="t m0 x2 h5 y4b ff3 fs2 fc0 sc0 ls9 ws0">foreach (@elements) {s/a/b/;} </div><div class="t m0 x21 h5 y4c ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x21 h5 y4b ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y4d ff4 fs1 fc0 sc0 ls0 ws0">程序使<span class="ff3"> @elements </span>等于<span class="_ _2"> </span><span class="ff3">b</span>1,<span class="ff3">b2</span>.<span class="ff3">b3</span>,<span class="ff3">b4</span>,<span class="ff3">b5</span>。另外:<span class="ff3"> </span></div><div class="t m0 x2 h5 y4e ff3 fs2 fc0 sc0 ls9 ws0"> while(<$FD>) {print if (m/ERBOR/);}</div><div class="t m0 x2 h5 y4f ff3 fs2 fc0 sc0 ls9 ws0"> while(<$FD>) {print if (m/ERBOR/);}<span class="_ _2a"></span> while(<$FD>) {print if (m/ERBOR/);}</div><div class="t m0 x2 h5 y4e ff3 fs2 fc0 sc0 ls9 ws0"> while(<$FD>) {print if (m/ERBOR/);} </div><div class="t m0 x22 h5 y4f ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x22 h5 y4e ff3 fs2 fc0 sc0 ls0 ws0"> </div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/1597729/bg3.jpg"><div class="t m0 x2 h3 y1d ff4 fs1 fc0 sc0 ls0 ws0">打印所有包含<span class="ff3"> error </span>字符串的行:<span class="ff3"> </span></div><div class="t m0 x2 h5 y50 ff3 fs2 fc0 sc0 ls9 ws0"> if (grep(/pattern/, @lines)) {print </div><div class="t m0 x2 h5 y51 ff3 fs2 fc0 sc0 ls9 ws0"> if (grep(/pattern/, @lines)) {print <span class="_ _2a"></span> if (grep(/pattern/, @lines)) {print </div><div class="t m0 x2 h5 y50 ff3 fs2 fc0 sc0 ls9 ws0"> if (grep(/pattern/, @lines)) {print <span class="ff4 ls0">“</span></div><div class="t m0 x22 h6 y51 ff4 fs2 fc0 sc0 ls0 ws0">“<span class="_ _2b"></span>“</div><div class="t m0 x22 h5 y50 ff4 fs2 fc0 sc0 ls0 ws0">“<span class="_ _4"></span><span class="ff3 ls9"> the variable </span></div><div class="t m0 x23 h5 y51 ff3 fs2 fc0 sc0 ls9 ws0"> the variable <span class="_ _e"></span> the variable </div><div class="t m0 x23 h5 y50 ff3 fs2 fc0 sc0 ls9 ws0"> the variable <span class="ff4 ls0">\</span></div><div class="t m0 x24 h6 y51 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x24 h5 y50 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9 ws6">@lines has pattern in it!</span></div><div class="t m0 x25 h5 y51 ff3 fs2 fc0 sc0 ls9 ws6">@lines has pattern in it!<span class="_ _2c"></span>@lines has pattern in it!</div><div class="t m0 x25 h5 y50 ff3 fs2 fc0 sc0 ls9 ws6">@lines has pattern in it!<span class="ff4 ls0 ws0">\</span></div><div class="t m0 x26 h6 y51 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x26 h5 y50 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3">n</span></div><div class="t m0 x27 h5 y51 ff3 fs2 fc0 sc0 ls0 ws0">n<span class="_ _f"></span>n</div><div class="t m0 x27 h5 y50 ff3 fs2 fc0 sc0 ls0 ws0">n<span class="_ _4"></span><span class="ff4">”</span></div><div class="t m0 x28 h6 y51 ff4 fs2 fc0 sc0 ls0 ws0">”<span class="_ _2b"></span>”</div><div class="t m0 x28 h5 y50 ff4 fs2 fc0 sc0 ls0 ws0">”<span class="_ _4"></span><span class="ff3 ls9">;}</span></div><div class="t m0 x29 h5 y51 ff3 fs2 fc0 sc0 ls9 ws0">;}<span class="_ _2d"></span>;}</div><div class="t m0 x29 h5 y50 ff3 fs2 fc0 sc0 ls9 ws0">;} </div><div class="t m0 xf h5 y51 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 xf h5 y50 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y52 ff4 fs1 fc0 sc0 ls0 ws0">打印所有包含模式<span class="_ _2"> </span><span class="ff3">pattern<span class="_ _2"> </span></span>内容的行,这直接引入下一原则。<span class="ff3"> </span></div><div class="t m0 x2 h3 y53 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y54 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2 h3 y53 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y55 ff3 fs1 fc0 sc0 ls0 ws0">9</div><div class="t m0 x2 h3 y56 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _3"></span>9</div><div class="t m0 x2 h3 y55 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 x8 h4 y56 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 x8 h3 y55 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3">3</span></div><div class="t m0 x9 h3 y56 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x9 h3 y55 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 xa h4 y56 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 xa h3 y55 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3 ls4">2 </span></div><div class="t m0 xb h3 y56 ff3 fs1 fc0 sc0 ls4 ws0">2 <span class="_ _5"></span>2 </div><div class="t m0 xb h3 y55 ff3 fs1 fc0 sc0 ls4 ws0">2 <span class="ff4">原则</span></div><div class="t m0 x2a h4 y56 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _7"></span>原则</div><div class="t m0 x2a h3 y55 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _2"> </span><span class="ff3 ls0">2</span></div><div class="t m0 x2b h3 y56 ff3 fs1 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>2</div><div class="t m0 x2b h3 y55 ff3 fs1 fc0 sc0 ls2 ws0">2 </div><div class="t m0 x2c h3 y56 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2c h3 y55 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y57 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">正则表达式仅在标量上匹配。</span> </div><div class="t m0 x2 h3 y58 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">注意这里标量的重要性,如果读者试一试如下代码:</span> </div><div class="t m0 x2 h5 y59 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y5a ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y59 ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName = (' variablel', 'variable2');</div><div class="t m0 x2d h5 y5a ff3 fs2 fc0 sc0 ls9 ws0">@arrayName = (' variablel', 'variable2');<span class="_ _2f"></span>@arrayName = (' variablel', 'variable2');</div><div class="t m0 x2d h5 y59 ff3 fs2 fc0 sc0 ls9 ws0">@arrayName = (' variablel', 'variable2'); </div><div class="t m0 x2e h5 y5a ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x2e h5 y59 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y5b ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName =~ m/variable/; # looks for ' variable' in the array? No! use grep instead</div><div class="t m0 x2 h5 y5c ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName =~ m/variable/; # looks for ' variable' in the array? No! use grep instead<span class="_ _30"></span> @arrayName =~ m/variable/; # looks for ' variable' in the array? No! use grep instead</div><div class="t m0 x2 h5 y5b ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName =~ m/variable/; # looks for ' variable' in the array? No! use grep instead </div><div class="t m0 x2f h5 y5c ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x2f h5 y5b ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y5d ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">那么</span>@arrayName<span class="_ _2"> </span><span class="ff4">匹<span class="_ _8"></span>配不成功<span class="ff3 ws8">! @a<span class="_ _8"></span>rrayName<span class="_"> </span><span class="ff4 ws0">被<span class="_ _2"> </span><span class="ff3 ls5">Perl<span class="_ _2"> </span><span class="ff4">解释为<span class="_ _2"> </span></span><span class="ls0">2</span></span>,于是这意味着读者<span class="_ _8"></span>在输入:<span class="_ _31"></span><span class="ff3"> </span></span></span></span></div><div class="t m0 x2 h5 y5e ff3 fs2 fc0 sc0 ls9 ws0"> ' 2' =~ m/variable/;</div><div class="t m0 x2 h5 y5f ff3 fs2 fc0 sc0 ls9 ws0"> ' 2' =~ m/variable/;<span class="_ _32"></span> ' 2' =~ m/variable/;</div><div class="t m0 x2 h5 y5e ff3 fs2 fc0 sc0 ls9 ws0"> ' 2' =~ m/variable/; </div><div class="t m0 x1c h5 y5f ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1c h5 y5e ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y60 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">至少讲这不能给出预想的结果。如果读者想这样做,输人为:</span> </div><div class="t m0 x2 h5 y61 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y62 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y61 ff3 fs2 fc0 sc0 ls9 ws0"> grep(m/variable/, @arrayName);</div><div class="t m0 x2d h5 y62 ff3 fs2 fc0 sc0 ls9 ws0">grep(m/variable/, @arrayName);<span class="_ _28"></span>grep(m/variable/, @arrayName);</div><div class="t m0 x2d h5 y61 ff3 fs2 fc0 sc0 ls9 ws0">grep(m/variable/, @arrayName); </div><div class="t m0 x30 h5 y62 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x30 h5 y61 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x31 h3 y63 ff4 fs1 fc0 sc0 ls0 ws0">该函数通过<span class="ff3">@arr<span class="_ _8"></span>ayName<span class="_ _b"> </span><span class="ff4">中的每一个元<span class="_ _8"></span>素进行循环,<span class="_ _8"></span>返回<span class="ff3">(</span>在标量环<span class="_ _8"></span>境中<span class="ff3">)</span>匹配的次数<span class="_ _8"></span>,同</span></span></div><div class="t m0 x2 h3 y64 ff4 fs1 fc0 sc0 ls0 ws0">时在数组环境中返回匹配元素的实际列表。<span class="ff3"> </span></div><div class="t m0 x2 h3 y65 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y66 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2 h3 y65 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y67 ff3 fs1 fc0 sc0 ls0 ws0">9</div><div class="t m0 x2 h3 y68 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _3"></span>9</div><div class="t m0 x2 h3 y67 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 x8 h4 y68 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 x8 h3 y67 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3">3</span></div><div class="t m0 x9 h3 y68 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x9 h3 y67 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 xa h4 y68 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 xa h3 y67 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3 ls4">3 </span></div><div class="t m0 xb h3 y68 ff3 fs1 fc0 sc0 ls4 ws0">3 <span class="_ _5"></span>3 </div><div class="t m0 xb h3 y67 ff3 fs1 fc0 sc0 ls4 ws0">3 <span class="ff4">原则</span></div><div class="t m0 x2a h4 y68 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _7"></span>原则</div><div class="t m0 x2a h3 y67 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _2"> </span><span class="ff3 ls0">3</span></div><div class="t m0 x2b h3 y68 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x2b h3 y67 ff3 fs1 fc0 sc0 ls2 ws0">3 </div><div class="t m0 x2c h3 y68 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2c h3 y67 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x31 h4 y69 ff4 fs1 fc0 sc0 ls0 ws0">对于给定的模式<span class="_ _4"></span>串,正则表达式只<span class="_ _4"></span>匹配最早出现的匹<span class="_ _4"></span>配项。匹配时缺省<span class="_ _4"></span>一次只匹配或替</div><div class="t m0 x2 h3 y6a ff4 fs1 fc0 sc0 ls0 ws0">换一次。<span class="ff3"> </span></div><div class="t m0 x31 h4 y6b ff4 fs1 fc0 sc0 ls0 ws0">这个原则使用称<span class="_ _4"></span>为“回溯”的过程<span class="_ _4"></span>指出如何匹配一个<span class="_ _4"></span>给定的字符串;如<span class="_ _4"></span>果发现了一个局</div><div class="t m0 x2 h4 y6c ff4 fs1 fc0 sc0 ls0 ws0">部匹配进而找到<span class="_ _8"></span>使该匹配无效的<span class="_ _8"></span>东西,正则表<span class="_ _8"></span>达式在字符串中<span class="_ _8"></span>“回溯”最小<span class="_ _8"></span>的可能数量,<span class="_ _8"></span>这</div><div class="t m0 x2 h3 y6d ff4 fs1 fc0 sc0 ls0 ws0">个数量的字符要保<span class="ff5">证</span>不<span class="ff5">丢失任</span>何匹配。<span class="ff3"> </span></div><div class="t m0 x2 h3 y6e ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">对于理解正则<span class="_ _4"></span>表达式正在<span class="_ _4"></span>做</span><span class="ff5">什<span class="ff4 ls5">么,<span class="_ _1c"></span>这个原则是最有<span class="ff5">帮助<span class="_ _4"></span></span>的一个,<span class="_ _1c"></span>同时不<span class="ff5 ls0">需</span>要与<span class="_ _2"> </span><span class="ff3 ls0">Perl<span class="_ _2"> </span></span>一样</span></span></div><div class="t m0 x2 h3 y6f ff4 fs1 fc0 sc0 ls0 ws0">的形式来理解它正在做<span class="ff5">什</span>么。<span class="ff5">假</span>定有如下模式:<span class="ff3"> </span></div><div class="t m0 x2 h5 y70 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y71 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y70 ff3 fs2 fc0 sc0 ls9 ws0"> ' Silly people do silly things if in silly moods'</div><div class="t m0 x2d h5 y71 ff3 fs2 fc0 sc0 ls9 ws0">' Silly people do silly things if in silly moods'<span class="_ _33"></span>' Silly people do silly things if in silly moods'</div><div class="t m0 x2d h5 y70 ff3 fs2 fc0 sc0 ls9 ws0">' Silly people do silly things if in silly moods' </div><div class="t m0 x32 h5 y71 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x32 h5 y70 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y72 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">同时想匹配如下模式:<span class="_ _31"></span><span class="ff5">‘<span class="ff3"> </span></span></span></div><div class="t m0 x2 h5 y73 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y74 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y73 ff3 fs2 fc0 sc0 ls9 ws0"> ' silly moods'</div><div class="t m0 x2d h5 y74 ff3 fs2 fc0 sc0 ls9 ws0">' silly moods'<span class="_ _e"></span>' silly moods'</div><div class="t m0 x2d h5 y73 ff3 fs2 fc0 sc0 ls9 ws0">' silly moods' </div><div class="t m0 x4 h5 y74 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x4 h5 y73 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y75 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">那么正则表达<span class="_ _4"></span>式引</span><span class="ff5">擎<span class="ff4">匹配<span class="_ _2"> </span></span></span>silly<span class="ff4">,接<span class="_ _8"></span>着<span class="ff5">遇</span>到<span class="_ _2"> </span><span class="ff3">peo<span class="_ _8"></span>ple<span class="_ _2"> </span><span class="ff4">的<span class="_ _2"> </span></span>P<span class="ff4 ls5">,至此,正则表达式<span class="_ _4"></span>引<span class="ff5">擎知道第</span></span></span></span></div><div class="t m0 x2 h3 y76 ff4 fs1 fc0 sc0 ls0 ws0">一个<span class="_ _2"> </span><span class="ff3">silly<span class="_ _2"> </span></span>不匹<span class="_ _8"></span>配,<span class="_ _6"></span>于是正则表达式引<span class="ff5 ls5">擎移</span>到<span class="ff3"> P <span class="_ _6"></span><span class="ff5">且继续寻<span class="_ _8"></span>求<span class="ff4 ls5">匹配。<span class="_ _1c"></span><span class="ls0">它接<span class="_ _8"></span>着<span class="ff5">遇</span>到<span class="ff5">第二</span>个<span class="_ _2"> </span><span class="ff3">s<span class="_ _8"></span>illy<span class="ff4">,</span></span></span></span></span></span></div><div class="t m0 x2 h3 y77 ff4 fs1 fc0 sc0 ls5 ws0">于是来匹配<span class="_ _27"> </span><span class="ff3 ls0">moods<span class="ff4">。<span class="ff5">然</span>而<span class="_ _8"></span><span class="ff5">得<span class="ff4">到的是字</span>母<span class="ff3 ls5 ws1"> t(</span><span class="ff4">在<span class="_ _2"> </span><span class="ff3">thin<span class="_ _8"></span>g<span class="_ _2"> </span><span class="ff4">中</span>)<span class="ff4 ls5">,于是</span><span class="ff5">移<span class="ff4">到</span></span><span class="ws2"> things<span class="_ _2"> </span></span><span class="ff4 ls5">中的</span> t <span class="ff4">处,<span class="_ _8"></span><span class="ff5">继续</span></span></span></span></span></span></span></div><div class="t m0 x2 h3 y78 ff4 fs1 fc0 sc0 ls0 ws0">进行匹配。<span class="ff5">当</span>引<span class="_ _8"></span><span class="ff5">擎遇<span class="ff4">到</span>第<span class="ff4">三个<span class="_ _2"> </span><span class="ff3">s<span class="_ _8"></span>illy<span class="_ _2"> </span><span class="ff4">并<span class="ff5">且</span>尽<span class="ff5">力<span class="_ _8"></span><span class="ff4 ls5">匹配<span class="_ _2"> </span><span class="ff3 ls0">moods<span class="_ _2"> </span><span class="ff4">时,匹配<span class="_ _8"></span>成功,匹配最<span class="ff5 ls5">后完<span class="ff4">成。所</span></span></span></span></span></span></span></span></span></span></div><div class="t m0 x2 h3 y79 ff4 fs1 fc0 sc0 ls0 ws0">发<span class="ff5">生</span>的情况如图<span class="ff3"> 9-2 </span>所示。<span class="ff3"> </span></div><div class="t m0 x2 h3 y7a ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff5">当<span class="ff4">我们</span>遇<span class="ff4 ls5">到通配符时回溯将变<span class="_ _4"></span><span class="ff5">得更加</span><span class="ls0">重要。如果在同一正<span class="_ _8"></span>则表达式中有<span class="_ _8"></span><span class="ff5">几<span class="ff4">个通配符,<span class="_ _8"></span><span class="ff5">且</span></span></span></span></span></span></div><div class="t m0 x2 h4 y7b ff4 fs1 fc0 sc0 ls0 ws0">所有的通配符<span class="ff5 ls5">交织<span class="ff4">在一</span><span class="ls0">起</span></span><span class="lsd">,那<span class="_ _11"> </span>么<span class="_ _11"> </span>这<span class="_ _34"> </span>里<span class="_ _11"> </span></span><span class="ff5">就</span>有<span class="ff5">病态</span>情形出现,<span class="_ _1c"></span>在这种情形下,<span class="_ _1c"></span>回溯变<span class="ff5">得非</span>常<span class="ff5 ls5">昂贵</span>。</div><div class="t m0 x2 h3 y7c ff5 fs1 fc0 sc0 ls0 ws0">看<span class="ff4">如下表达式:<span class="ff3"> </span>:<span class="ff3"> </span></span></div><div class="t m0 x2 h5 y7d ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y7e ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _35"></span> </div><div class="t m0 x2 h5 y7d ff3 fs2 fc0 sc0 ls9 ws0"> $line = m/expression.*matching.*could.*be.*very.*expensive.*/</div><div class="t m0 x33 h5 y7e ff3 fs2 fc0 sc0 ls9 ws0">$line = m/expression.*matching.*could.*be.*very.*expensive.*/<span class="_ _36"></span>$line = m/expression.*matching.*could.*be.*very.*expensive.*/</div><div class="t m0 x33 h5 y7d ff3 fs2 fc0 sc0 ls9 ws0">$line = m/expression.*matching.*could.*be.*very.*expensive.*/ </div><div class="t m0 x34 h5 y7e ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x34 h5 y7d ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y7f ff3 fs1 fc0 sc0 ls0 ws0"> .* <span class="ff4 ls5">代表一个通配符,它<span class="_ _4"></span>意味着“匹<span class="_ _4"></span>配</span><span class="ff5">任<span class="ff4 ls5">意字符</span></span>(<span class="ff4">换行符<span class="ff5">除</span>外</span>)<span class="ff5">零<span class="_ _8"></span><span class="ff4">次或<span class="ff5">多</span>次”<span class="_ _31"></span>。这个过程有</span></span></div><div class="t m0 x2 h4 y80 ff4 fs1 fc0 sc0 ls0 ws0">可能<span class="ff5 ls5">花很长</span>时<span class="ff5">间</span>;如果在<span class="ff5">未</span>匹配<span class="_ _8"></span>过的字符串<span class="ff5 ls5">末尾</span>有可能匹<span class="_ _8"></span>配,那么引<span class="ff5">擎<span class="_ _8"></span><span class="ff4">将发<span class="ff5">狂地</span><span class="ls5">回溯。为</span><span class="ff5">得</span></span></span></div><div class="t m0 x2 h3 y81 ff4 fs1 fc0 sc0 ls0 ws0">到这<span class="ff5">方</span>面的<span class="ff5">更多信息</span>,<span class="ff5">请留</span>意<span class="ff5">关</span>于通配符<span class="ff5">方</span>面的原则。<span class="ff3"> </span></div><div class="t m0 x2 h3 y82 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">如果读者发现类<span class="ff5">似</span>于上面的情形,那么通配符<span class="ff5">需<span class="_ _8"></span><span class="ff4 ls5">将正则表达式<span class="ff5 ls0">分</span>解成小功部<span class="ff5 ls0">分</span>。换<span class="ff5">句话<span class="ff3 ls0"> </span></span></span></span></span></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/1597729/bg4.jpg"><div class="t m0 x2 h3 y1d ff4 fs1 fc0 sc0 ls0 ws0">讲,简化自<span class="ff5">己</span>的正则表达式。<span class="ff3"> </span></div><div class="t m0 x35 h3 y83 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y84 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y85 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2 h3 y84 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y86 ff3 fs1 fc0 sc0 ls0 ws0">9</div><div class="t m0 x2 h3 y87 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _3"></span>9</div><div class="t m0 x2 h3 y86 ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 x8 h4 y87 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 x8 h3 y86 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3">3</span></div><div class="t m0 x9 h3 y87 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x9 h3 y86 ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 xa h4 y87 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 xa h3 y86 ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3 ls4">4 </span></div><div class="t m0 xb h3 y87 ff3 fs1 fc0 sc0 ls4 ws0">4 <span class="_ _5"></span>4 </div><div class="t m0 xb h3 y86 ff3 fs1 fc0 sc0 ls4 ws0">4 <span class="ff4">原则</span></div><div class="t m0 x2a h4 y87 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _7"></span>原则</div><div class="t m0 x2a h3 y86 ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _2"> </span><span class="ff3 ls0">4</span></div><div class="t m0 x2b h3 y87 ff3 fs1 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>4</div><div class="t m0 x2b h3 y86 ff3 fs1 fc0 sc0 ls2 ws0">4 </div><div class="t m0 x2c h3 y87 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2c h3 y86 ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y88 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">正则表达式能<span class="ff5">够</span>处理<span class="ff5">双</span>引<span class="ff5">号</span>字符串所能处理的<span class="ff5">任</span>意和<span class="ff5">全</span>部的字符。</span> </div><div class="t m0 x2 h3 y89 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">在<span class="_ _b"> </span></span>s///<span class="_ _8"></span><span class="ff4">运算符<span class="ff3">(s/*//<span class="_ _8"></span>)<span class="ff4">,或者<span class="_ _b"> </span></span>m//<span class="_ _8"></span><span class="ff4">运算符<span class="_ _b"> </span><span class="ff3">m/*<span class="_ _8"></span>/<span class="ff4">的<span class="ff5">第</span>一个<span class="ff5">分隔<span class="_ _8"></span>区<span class="ff4">,</span>位<span class="ff4">于</span>其<span class="ff4 ls5">中的</span>条<span class="ff4">目</span>确<span class="ff4 ls5">实能</span></span></span></span></span></span></span></div><div class="t m0 x2 h3 y8a ff4 fs1 fc0 sc0 ls0 ws0">像<span class="ff5">双</span>引<span class="ff5">号</span><span class="ls5">字符串一样对</span><span class="ff5">待<span class="ff3">(</span>带</span>有一些<span class="ff5">额</span>外的<span class="_ _8"></span><span class="ff5">附加<span class="ff4">功能,</span>名<span class="ff4 ls5">义上的特</span>殊<span class="ff4">正则表达<span class="_ _8"></span>式字符<span class="ff3">!<span class="ff5">后</span></span>面<span class="ff5">描</span></span></span></div><div class="t m0 x2 h3 y8b ff5 fs1 fc0 sc0 ls0 ws0">述<span class="ff3">)<span class="ff4">。读者可用</span></span>他<span class="ff4">们进行内</span>插<span class="ff4">:<span class="ff3"> </span></span></div><div class="t m0 x2 h5 y8c ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y8d ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y8c ff3 fs2 fc0 sc0 ls9 ws0"> $variable = ' TEST' ;</div><div class="t m0 x2d h5 y8d ff3 fs2 fc0 sc0 ls9 ws0">$variable = ' TEST' ;<span class="_ _37"></span>$variable = ' TEST' ;</div><div class="t m0 x2d h5 y8c ff3 fs2 fc0 sc0 ls9 ws0">$variable = ' TEST' ; </div><div class="t m0 x36 h5 y8d ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x36 h5 y8c ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y8e ff3 fs2 fc0 sc0 ls9 ws0"> $a =~ m/${variable}aha/;</div><div class="t m0 x2 h5 y8f ff3 fs2 fc0 sc0 ls9 ws0"> $a =~ m/${variable}aha/;<span class="_ _38"></span> $a =~ m/${variable}aha/;</div><div class="t m0 x2 h5 y8e ff3 fs2 fc0 sc0 ls9 ws0"> $a =~ m/${variable}aha/; </div><div class="t m0 x37 h5 y8f ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x37 h5 y8e ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y90 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">和:</span> </div><div class="t m0 x2 h5 y91 ff3 fs2 fc0 sc0 ls9 ws0"> $a = " ${variable}aha" ;</div><div class="t m0 x2 h5 y92 ff3 fs2 fc0 sc0 ls9 ws0"> $a = " ${variable}aha" ;<span class="_ _38"></span> $a = " ${variable}aha" ;</div><div class="t m0 x2 h5 y91 ff3 fs2 fc0 sc0 ls9 ws0"> $a = " ${variable}aha" ; </div><div class="t m0 x37 h5 y92 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x37 h5 y91 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y93 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff5">二<span class="ff4 ls2">者都指</span>向<span class="ff4 lse">同一字符串:<span class="_"> </span></span>前<span class="_ _4"></span><span class="ff4 lse">者在</span></span>$a<span class="_"> </span><span class="ff4 lse">中<span class="_"> </span>匹配字符串<span class="_ _39"> </span></span>TESTaha<span class="ff4">.<span class="_ _4"></span><span class="ff5">后</span><span class="lse">者把<span class="_"> </span></span></span><span class="ls5">$a<span class="_ _39"> </span><span class="ff5 ls2">设置<span class="ff4 lse">为字符串</span></span> </span></div><div class="t m0 x2 h3 y94 ff3 fs1 fc0 sc0 ls0 ws0">TESTaha<span class="ff4">。因为正则表达式处理<span class="ff5">双</span>引<span class="ff5">号</span>字符串能处理的每个字符,所以可以<span class="ff5">执</span>行下列操作:</span> </div><div class="t m0 x2 h5 y95 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 y96 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 y95 ff3 fs2 fc0 sc0 ls9 ws0"> $expression = ' hello';</div><div class="t m0 x2d h5 y96 ff3 fs2 fc0 sc0 ls9 ws0">$expression = ' hello';<span class="_ _3a"></span>$expression = ' hello';</div><div class="t m0 x2d h5 y95 ff3 fs2 fc0 sc0 ls9 ws0">$expression = ' hello'; </div><div class="t m0 x1d h5 y96 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1d h5 y95 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y97 ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName = (' elem<span class="ff4 ls0">1</span>', ' elem2');</div><div class="t m0 x2 h5 y98 ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName = (' elem<span class="ff4 ls0">1</span>', ' elem2');<span class="_ _3b"></span> @arrayName = (' elem<span class="ff4 ls0">1</span>', ' elem2');</div><div class="t m0 x2 h5 y97 ff3 fs2 fc0 sc0 ls9 ws0"> @arrayName = (' elem<span class="ff4 ls0">1</span>', ' elem2');<span class="_ _4"></span> </div><div class="t m0 x38 h5 y98 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x38 h5 y97 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 y99 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m/$expression/; # this equals m/hello/;</div><div class="t m0 x2 h5 y9a ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m/$expression/; # this equals m/hello/;<span class="_ _3c"></span> $variable =~ m/$expression/; # this equals m/hello/;</div><div class="t m0 x2 h5 y99 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m/$expression/; # this equals m/hello/; </div><div class="t m0 x39 h5 y9a ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x39 h5 y99 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y9b ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">在这里,我们<span class="_ _4"></span>简</span><span class="ff5">单地<span class="ff4">把</span></span>$express<span class="_ _8"></span>ion<span class="_ _2"> </span><span class="ff5">扩展<span class="ff4">为<span class="_ _2"> </span></span></span><span class="ls5">hello<span class="_ _2"> </span></span><span class="ff4">而<span class="ff5">得</span>到<span class="_ _2"> </span></span>m/hello/<span class="_ _8"></span><span class="ff4">。这个<span class="ff5">技巧也<span class="_ _8"></span><span class="ff4">可用于</span></span></span></div><div class="t m0 x2 h3 y9c ff4 fs1 fc0 sc0 ls0 ws0">数组:<span class="ff3"> </span></div><div class="t m0 x2 h5 y9d ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m</div><div class="t m0 x2 h5 y9e ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m<span class="_ _3d"></span> $variable =~ m</div><div class="t m0 x2 h5 y9d ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m/@arrayName/; # this equals m/elem<span class="ff4 ls0">1<span class="_ _4"></span></span> elem2/;</div><div class="t m0 x4 h5 y9e ff3 fs2 fc0 sc0 ls9 ws0">/@arrayName/; # this equals m/elem<span class="ff4 ls0">1</span> elem2/;<span class="_ _3e"></span>/@arrayName/; # this equals m/elem<span class="ff4 ls0">1</span> elem2/;</div><div class="t m0 x4 h5 y9d ff3 fs2 fc0 sc0 ls9 ws0">/@arrayName/; # this equals m/elem<span class="ff4 ls0">1</span> elem2/;<span class="_ _4"></span> </div><div class="t m0 x3a h5 y9e ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x3a h5 y9d ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 y9f ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">在这里,<span class="_ _c"></span>表达式<span class="_ _4"></span>等<span class="ff5 ls0">价<span class="ff4">于<span class="ff3"> m/elem</span>1<span class="_ _8"></span><span class="ff3 ws8"> elem2/<span class="ff4 ls5 ws0">。<span class="_ _c"></span>如果特<span class="ff5 ls0">殊</span>变量<span class="ff3 ls0">$"<span class="ff4">被</span></span><span class="ff5">设置</span><span class="ls0">为<span class="ff3"> |</span>.<span class="_ _c"></span>则表达<span class="_ _8"></span>式将等<span class="ff5">价</span></span></span></span></span></span></span></div><div class="t m0 x2 h3 ya0 ff4 fs1 fc0 sc0 ls0 ws0">于<span class="ff3"> m<span class="ff5">/</span><span class="ws9">elem | e<span class="_ _8"></span>lem2<span class="ff5 ws0">/<span class="ff4">,正如我<span class="_ _8"></span>们<span class="ff5">看</span>到的,它<span class="_ _8"></span>匹配字符串的<span class="_ _2"> </span><span class="ff3">e<span class="_ _8"></span>lem<span class="_ _2"> </span><span class="ff4">或者<span class="_ _2"> </span></span>elem<span class="_ _8"></span>2<span class="ff4">。这种<span class="ff5">方</span>法<span class="_ _8"></span><span class="ff5">也<span class="ff4">可</span></span></span></span></span></span></span></span></div><div class="t m0 x2 h3 ya1 ff4 fs1 fc0 sc0 ls0 ws0">应用于特<span class="ff5">殊</span>字符:<span class="ff3"> </span></div><div class="t m0 x2 h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 ya3 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m/</div><div class="t m0 x2d h5 ya3 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m/<span class="_ _1a"></span>$variable =~ m/</div><div class="t m0 x2d h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m/<span class="ff4 ls0">\</span></div><div class="t m0 x10 h6 ya3 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x10 h5 ya2 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">x0</span>1</div><div class="t m0 x19 h5 ya3 ff3 fs2 fc0 sc0 ls9 ws0">x0<span class="ff4 ls0">1<span class="_ _23"></span><span class="ff3 ls9">x0<span class="ff4 ls0">1</span></span></span></div><div class="t m0 x19 h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0">x0<span class="ff4 lsf">1\</span></div><div class="t m0 x1b h6 ya3 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x1b h5 ya2 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">27/;</span></div><div class="t m0 x1c h5 ya3 ff3 fs2 fc0 sc0 ls9 ws0">27/;<span class="_ _2e"></span>27/;</div><div class="t m0 x1c h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0">27/; </div><div class="t m0 x37 h5 ya3 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x37 h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _14"> </span># match binary character x0<span class="ff4 ls0">1</span>, and</div><div class="t m0 x3b h5 ya3 ff3 fs2 fc0 sc0 ls9 ws0"># match binary character x0<span class="ff4 ls0">1</span>, and<span class="_ _3f"></span># match binary character x0<span class="ff4 ls0">1</span>, and</div><div class="t m0 x3b h5 ya2 ff3 fs2 fc0 sc0 ls9 ws0"># match binary character x0<span class="ff4 ls0">1</span>, and<span class="_ _4"></span> </div><div class="t m0 x3c h5 ya3 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x3c h5 ya2 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 ya4 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 ya5 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 ya4 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2d h5 ya5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x2d h5 ya4 ff3 fs2 fc0 sc0 ls10 ws0"> </div><div class="t m0 xa h5 ya5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 xa h5 ya4 ff3 fs2 fc0 sc0 ls11 ws0"> </div><div class="t m0 x3d h5 ya5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x3d h5 ya4 ff3 fs2 fc0 sc0 ls11 ws0"> </div><div class="t m0 x3e h5 ya5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x3e h5 ya4 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _40"> </span># octal character 27.</div><div class="t m0 x4 h5 ya5 ff3 fs2 fc0 sc0 ls9 ws0"># octal character 27.<span class="_ _37"></span># octal character 27.</div><div class="t m0 x4 h5 ya4 ff3 fs2 fc0 sc0 ls9 ws0"># octal character 27. </div><div class="t m0 x3f h5 ya5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x3f h5 ya4 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0"> $va</div><div class="t m0 x2 h5 ya7 ff3 fs2 fc0 sc0 ls9 ws0"> $va<span class="_ _d"></span> $va</div><div class="t m0 x2 h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ s/</div><div class="t m0 xb h5 ya7 ff3 fs2 fc0 sc0 ls9 ws0">riable =~ s/<span class="_ _41"></span>riable =~ s/</div><div class="t m0 xb h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0">riable =~ s/<span class="ff4 ls0">\</span></div><div class="t m0 x10 h6 ya7 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x10 h5 ya6 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3">t</span></div><div class="t m0 x19 h5 ya7 ff3 fs2 fc0 sc0 ls0 ws0">t<span class="_ _f"></span>t</div><div class="t m0 x19 h5 ya6 ff3 fs2 fc0 sc0 ls0 ws0">t<span class="_ _4"></span><span class="ff4">\</span></div><div class="t m0 xe h6 ya7 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 xe h5 ya6 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3">t</span></div><div class="t m0 x17 h5 ya7 ff3 fs2 fc0 sc0 ls0 ws0">t<span class="_ _f"></span>t</div><div class="t m0 x17 h5 ya6 ff3 fs2 fc0 sc0 ls0 ws0">t<span class="_ _4"></span><span class="ff4">\</span></div><div class="t m0 x1b h6 ya7 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x1b h5 ya6 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">t//;</span></div><div class="t m0 x1c h5 ya7 ff3 fs2 fc0 sc0 ls9 ws0">t//;<span class="_ _2e"></span>t//;</div><div class="t m0 x1c h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0">t//; </div><div class="t m0 x37 h5 ya7 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x37 h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _14"> </span># substitute three tabs for three spaces.</div><div class="t m0 x3b h5 ya7 ff3 fs2 fc0 sc0 ls9 ws0"># substitute three tabs for three spaces.<span class="_ _2f"></span># substitute three tabs for three spaces.</div><div class="t m0 x3b h5 ya6 ff3 fs2 fc0 sc0 ls9 ws0"># substitute three tabs for three spaces. </div><div class="t m0 x40 h5 ya7 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x40 h5 ya6 ff3 fs2 fc0 sc0 ls0 ws0"> </div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://csdnimg.cn/release/download_crawler_static/1597729/bg5.jpg"><div class="t m0 x2 h3 y1d ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">实际上,这里<span class="_ _4"></span>所</span><span class="ff5">讨论<span class="ff4">的</span>除极<span class="ff4">少数<span class="_ _8"></span>例外以外,<span class="ff3 ls5">Perl<span class="_ _2"> </span></span>处理在<span class="_ _2"> </span><span class="ff3">m//</span><span class="ls5">中的过程的</span><span class="ff5">确</span>像处理在<span class="ff5">双<span class="_ _8"></span><span class="ff4">引</span></span></span></span></div><div class="t m0 x2 h4 y1e ff5 fs1 fc0 sc0 ls0 ws0">号<span class="ff4">中的一样。但<span class="_ _8"></span>是有例外:有<span class="ff5">某<span class="_ _8"></span><span class="ff4">些对正则表达<span class="_ _8"></span>式引<span class="ff5">擎</span>有明<span class="ff5">确</span><span class="ls5">意义的字符。那么,<span class="_ _4"></span>如果想匹配</span></span></span></span></div><div class="t m0 x2 h3 y20 ff4 fs1 fc0 sc0 ls0 ws0">类<span class="ff5">似</span><span class="ls4">于正<span class="ff5">斜杠</span></span><span class="ff3">(/)</span><span class="ls4">或者</span><span class="ff5">园</span>括引<span class="ff3">(())<span class="_ _4"></span></span><span class="ls4">这样的字符会发<span class="_ _8"></span><span class="ff5 ls0">生什<span class="ff4">么</span><span class="ls4">呢?<span class="ff4">这些字符对正则表达式引</span></span>取<span class="ff4">有</span></span></span></div><div class="t m0 x2 h3 y21 ff4 fs1 fc0 sc0 ls0 ws0">特<span class="ff5">殊</span>意义:因而不能使用如下语<span class="ff5">句</span>:<span class="ff3"> </span></div><div class="t m0 x2 h5 ya8 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 ya9 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 ya8 ff3 fs2 fc0 sc0 ls9 ws0"> $variable</div><div class="t m0 x2d h5 ya9 ff3 fs2 fc0 sc0 ls9 ws0">$variable<span class="_ _42"></span>$variable</div><div class="t m0 x2d h5 ya8 ff3 fs2 fc0 sc0 ls9 ws0">$variable<span class="ff4 ls0">=</span></div><div class="t m0 x41 h6 ya9 ff4 fs2 fc0 sc0 ls0 ws0">=<span class="_ _2b"></span>=</div><div class="t m0 x41 h5 ya8 ff4 fs2 fc0 sc0 ls0 ws0">=<span class="_ _4"></span><span class="ff3 ls9">~ m//usr/local/bin/; # matches</span></div><div class="t m0 x16 h5 ya9 ff3 fs2 fc0 sc0 ls9 ws0">~ m//usr/local/bin/; # matches<span class="_ _43"></span>~ m//usr/local/bin/; # matches</div><div class="t m0 x16 h5 ya8 ff3 fs2 fc0 sc0 ls9 ws0">~ m//usr/local/bin/; # matches /usr/local/bin? NO! SYNTAX ERROR</div><div class="t m0 x42 h5 ya9 ff3 fs2 fc0 sc0 ls9 ws0"> /usr/local/bin? NO! SYNTAX ERROR<span class="_ _3f"></span> /usr/local/bin? NO! SYNTAX ERROR</div><div class="t m0 x42 h5 ya8 ff3 fs2 fc0 sc0 ls9 ws0"> /usr/local/bin? NO! SYNTAX ERROR </div><div class="t m0 x43 h5 ya9 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x43 h5 ya8 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yaa ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">因为<span class="_ _2"> </span></span>Perl<span class="_ _2"> </span><span class="ff4">将把</span>/<span class="ff4">解释<span class="_ _8"></span>为正则表达式的<span class="_ _8"></span>结<span class="ff5">束</span>标<span class="ff5">记</span>。这里<span class="_ _8"></span>有三种<span class="ff5">方</span>法去<span class="_ _8"></span>匹配类<span class="ff5">似</span><span class="ls5">于上</span><span class="ff5">述</span>特<span class="ff5">殊</span></span></div><div class="t m0 x2 h4 yab ff4 fs1 fc0 sc0 ls0 ws0">字符的<span class="ff5">方</span><span class="ls5">法。</span><span class="ff5">第</span>一种<span class="ff5">方</span><span class="ls5">法是</span><span class="ff5">利</span>用<span class="ff5">反料<span class="_ _8"></span>杠<span class="ff4 ls5">来“转义”想<span class="_ _4"></span>匹配的</span>任<span class="ff4">意特</span>殊<span class="ff4 ls5">字符一包括<span class="_ _4"></span><span class="ff5">反斜杠</span>。因</span></span></div><div class="t m0 x2 h3 yac ff4 fs1 fc0 sc0 ls0 ws0">而<span class="ff5">刚才</span>给出的例子可变为:<span class="ff3"> </span></div><div class="t m0 x2 h5 yad ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 yae ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 yad ff3 fs2 fc0 sc0 ls9 ws0"> $path =~ m/</div><div class="t m0 x2d h5 yae ff3 fs2 fc0 sc0 ls9 ws0">$path =~ m/<span class="_ _22"></span>$path =~ m/</div><div class="t m0 x2d h5 yad ff3 fs2 fc0 sc0 ls9 ws0">$path =~ m/<span class="ff4 ls0">\</span></div><div class="t m0 x16 h6 yae ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x16 h5 yad ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">/usr</span></div><div class="t m0 x1e h5 yae ff3 fs2 fc0 sc0 ls9 ws0">/usr<span class="_ _2e"></span>/usr</div><div class="t m0 x1e h5 yad ff3 fs2 fc0 sc0 ls9 ws0">/usr<span class="ff4 ls0">\</span></div><div class="t m0 x19 h6 yae ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x19 h5 yad ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">/local</span></div><div class="t m0 xe h5 yae ff3 fs2 fc0 sc0 ls9 ws0">/local<span class="_ _44"></span>/local</div><div class="t m0 xe h5 yad ff3 fs2 fc0 sc0 ls9 ws0">/local<span class="ff4 ls0">\</span></div><div class="t m0 x1d h6 yae ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x1d h5 yad ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">/bin/;</span></div><div class="t m0 x37 h5 yae ff3 fs2 fc0 sc0 ls9 ws0">/bin/;<span class="_ _44"></span>/bin/;</div><div class="t m0 x37 h5 yad ff3 fs2 fc0 sc0 ls9 ws0">/bin/; </div><div class="t m0 x30 h5 yae ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x30 h5 yad ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yaf ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">该程序尽</span><span class="ff5">力<span class="ff4">匹配</span></span> $path<span class="_ _2"> </span><span class="ff4">中的<span class="_ _8"></span><span class="ff3">/usr/local/b<span class="_ _8"></span>in<span class="ff4">。<span class="_ _6"></span><span class="ff5 ls5">第二<span class="ff4 ls0">种<span class="ff5">方</span>法是使用一个不同<span class="_ _8"></span>的正则表达式</span></span></span></span></span></div><div class="t m0 x2 h3 yb0 ff4 fs1 fc0 sc0 ls0 ws0">字符。如果有<span class="ff5">许多</span>字符要匹配,那么使用<span class="ff5">反斜杠</span>则会变<span class="ff5">得很</span>难<span class="ff5">看<span class="ff3">(</span>路径</span>字符<span class="ff5">尤其</span>不<span class="ff5">好<span class="ff3">)</span></span>。<span class="ff3"> </span></div><div class="t m0 x2 h3 yb1 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff5">幸<span class="ff4">运的是,<span class="_ _a"></span><span class="ff3">Perl<span class="_ _2"> </span><span class="ff4">以一种合成形式<span class="_ _8"></span>来<span class="ff5 ls5">确决<span class="ff4">这个</span>问题<span class="_ _4"></span></span><span class="ls12">。因<span class="_ _9"></span>为<span class="_ _9"> </span>在<span class="_ _9"> </span></span><span class="ff5">当</span><span class="ls5">读者输入<span class="_ _27"> </span></span><span class="ff3">m//</span>或<span class="_ _2"> </span><span class="ff3">s//<span class="_ _8"></span>/<span class="ff4">时<span class="ff5">需</span>要</span></span></span></span></span></span></div><div class="t m0 x2 h3 yb2 ff4 fs1 fc0 sc0 ls0 ws0">给每个<span class="ff3">/<span class="ff5 ls5">加反斜杠<span class="ff4">,所以正则<span class="_ _4"></span>表达式</span>允许<span class="_ _4"></span><span class="ff4">读者将正则表<span class="_ _4"></span>达式的定</span><span class="ls0">界</span></span></span>符<span class="ff3">(/)<span class="ff5">改</span></span><span class="ls5">为自</span><span class="ff5">己喜欢</span>的<span class="ff5">任</span>意</div><div class="t m0 x2 h3 yb3 ff4 fs1 fc0 sc0 ls0 ws0">字符。例如,我们可以使用<span class="ff5">双</span>引<span class="ff5">号<span class="ff3">(")</span></span>来<span class="ff5">避免大</span>量的<span class="ff5">反斜杠</span>:<span class="ff3"> </span></div><div class="t m0 x2 h5 yb4 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 yb5 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 yb4 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m"/usr/local/bin"; # Note the quotation marks.</div><div class="t m0 x2d h5 yb5 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m"/usr/local/bin"; # Note the quotation marks.<span class="_ _45"></span>$variable =~ m"/usr/local/bin"; # Note the quotation marks.</div><div class="t m0 x2d h5 yb4 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m"/usr/local/bin"; # Note the quotation marks. </div><div class="t m0 x44 h5 yb5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x44 h5 yb4 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 yb6 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m"</div><div class="t m0 x2 h5 yb7 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m"<span class="_ _13"></span> $variable =~ m"</div><div class="t m0 x2 h5 yb6 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m"<span class="ff4 ls0">\</span></div><div class="t m0 x10 h6 yb7 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x10 h5 yb6 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">"help</span></div><div class="t m0 x19 h5 yb7 ff3 fs2 fc0 sc0 ls9 ws0">"help<span class="_ _35"></span>"help</div><div class="t m0 x19 h5 yb6 ff3 fs2 fc0 sc0 ls9 ws0">"help<span class="ff4 ls0">\</span></div><div class="t m0 x36 h6 yb7 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x36 h5 yb6 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">""; # If you are going to match quotat</span></div><div class="t m0 x6 h5 yb7 ff3 fs2 fc0 sc0 ls9 ws0">""; # If you are going to match quotat<span class="_ _46"></span>""; # If you are going to match quotat</div><div class="t m0 x6 h5 yb6 ff3 fs2 fc0 sc0 ls9 ws0">""; # If you are going to match quotation</div><div class="t m0 x45 h5 yb7 ff3 fs2 fc0 sc0 ls9 ws0">ion<span class="_ _23"></span>ion</div><div class="t m0 x45 h5 yb6 ff3 fs2 fc0 sc0 ls9 ws0">ion </div><div class="t m0 x46 h5 yb7 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x46 h5 yb6 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 yb8 ff3 fs2 fc0 sc0 ls9 ws0"> # marks, you need to backslash them here. (as per</div><div class="t m0 x2 h5 yb9 ff3 fs2 fc0 sc0 ls9 ws0"> # marks, you need to backslash them here. (as per<span class="_ _47"></span> # marks, you need to backslash them here. (as per</div><div class="t m0 x2 h5 yb8 ff3 fs2 fc0 sc0 ls9 ws0"> # marks, you need to backslash them here. (as per<span class="ff4 ls0">\</span></div><div class="t m0 x47 h6 yb9 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x47 h5 yb8 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">")</span></div><div class="t m0 x48 h5 yb9 ff3 fs2 fc0 sc0 ls9 ws0">")<span class="_ _2d"></span>")</div><div class="t m0 x48 h5 yb8 ff3 fs2 fc0 sc0 ls9 ws0">") </div><div class="t m0 x2f h5 yb9 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x2f h5 yb8 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 yba ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ S" $variable" $variable"; # works in s///too.</div><div class="t m0 x2 h5 ybb ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ S" $variable" $variable"; # works in s///too.<span class="_ _48"></span> $variable =~ S" $variable" $variable"; # works in s///too.</div><div class="t m0 x2 h5 yba ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ S" $variable" $variable"; # works in s///too. </div><div class="t m0 x44 h5 ybb ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x44 h5 yba ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 ybc ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">出于</span><span class="ff5">好<span class="ff4">的</span><span class="ls5">初衷</span><span class="ff4">,<span class="_ _6"></span>我们在本<span class="ff5">书</span>的<span class="ff5 ls5">前几章</span>使用了这一<span class="ff5">约</span><span class="ls5">定。<span class="_ _6"></span>如果<span class="_ _4"></span>使用<span class="ff3 ls0">"<span class="ff4">作为读者的正<span class="_ _8"></span>则表达式</span></span></span></span></span></div><div class="t m0 x2 h4 ybd ff4 fs1 fc0 sc0 ls0 ws0">字符,那么在用<span class="_ _8"></span><span class="ff5">起<span class="ff4 ls5">来时它</span>充当<span class="ff4">了</span>好<span class="ff4">的</span>记忆<span class="ff4">法,<span class="_ _8"></span><span class="ff5">记住<span class="ff4">在这里所处<span class="_ _8"></span>理的实际上是<span class="_ _8"></span>字符串的变相<span class="_ _8"></span><span class="ff5">反</span></span></span></span></span></div><div class="t m0 x2 h3 ybe ff5 fs1 fc0 sc0 ls0 ws0">插<span class="ff4">入;</span>否<span class="ff4">则,引</span>号就远<span class="ff4">不如</span>斜杠<span class="ff4">常用。<span class="ff3"> </span></span></div><div class="t m0 x2 h3 ybf ff3 fs1 fc0 sc0 ls0 ws0"> Perl<span class="_ _2"> </span><span class="ff5">允许<span class="ff4">使用</span></span>{}()[]<span class="ff4">来<span class="ff5">书写</span>正则表达式:</span> </div><div class="t m0 x2 h5 yc0 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m{this works well with vi or emacs because the parens bounce};</div><div class="t m0 x2 h5 yc1 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m{this works well with vi or emacs because the parens bounce};<span class="_ _49"></span> $variable =~ m{this works well with vi or emacs because the parens bounce};</div><div class="t m0 x2 h5 yc0 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m{this works well with vi or emacs because the parens bounce}; </div><div class="t m0 x49 h5 yc1 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x49 h5 yc0 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 yc2 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m(this also works well);</div><div class="t m0 x2 h5 yc3 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m(this also works well);<span class="_ _2f"></span> $variable =~ m(this also works well);</div><div class="t m0 x2 h5 yc2 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m(this also works well); </div><div class="t m0 x4a h5 yc3 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x4a h5 yc2 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h5 yc4 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ s(substitute pattern) {for this pattern}sg;</div><div class="t m0 x2 h5 yc5 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ s(substitute pattern) {for this pattern}sg;<span class="_ _45"></span> $variable =~ s(substitute pattern) {for this pattern}sg;</div><div class="t m0 x2 h5 yc4 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ s(substitute pattern) {for this pattern}sg; </div><div class="t m0 x4b h5 yc5 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x4b h5 yc4 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yc6 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4 ls5">这一原则对我<span class="_ _4"></span>们处理</span><span class="ff5">多<span class="ff4">行正则表达式</span>非<span class="ff4">常<span class="_ _8"></span><span class="ff5">方便<span class="ff4">。因为在这<span class="_ _8"></span>里可以不用<span class="ff5">圆<span class="_ _8"></span><span class="ff4">括<span class="ff5">号</span><span class="ls5">,所以读者</span></span></span></span></span></span></span></div><div class="t m0 x2 h3 yc7 ff4 fs1 fc0 sc0 ls0 ws0">可以<span class="ff5 ls5">开始<span class="ff4">把表达式<span class="_ _4"></span>作为“</span><span class="ls0">微</span></span>型函数”对<span class="ff5">待<span class="ff3">(</span></span><span class="ls5">如果读者有像<span class="_ _2"> </span></span><span class="ff3">emacs<span class="_ _2"> </span></span>或<span class="_ _2"> </span><span class="ff3 ls5">vi<span class="_ _2"> </span><span class="ff4">这样的合理的<span class="_ _4"></span></span></span><span class="ff5">智</span>能编<span class="ff5">辑</span></div><div class="t m0 x2 h3 yc8 ff5 fs1 fc0 sc0 ls0 ws0">器<span class="ff3">)<span class="ff4">,换</span></span>句话<span class="ff4">讲,读者可在表达式的</span>开始<span class="ff4">和结</span>尾<span class="ff4">部</span>分之间往<span class="ff4">返。<span class="ff3"> </span></span></div><div class="t m0 x2 h3 yc9 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff5">第<span class="ff4">三种</span>方<span class="ff4">法是</span>利<span class="ff4">用函数<span class="_ _2"> </span></span></span>quotemeta()<span class="ff4">来自<span class="ff5">动地加反斜杠</span>。如果输入如下代码:</span> </div><div class="t m0 x2 h5 yca ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m" $scalar";</div><div class="t m0 x2 h5 ycb ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m" $scalar";<span class="_ _29"></span> $variable =~ m" $scalar";</div><div class="t m0 x2 h5 yca ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m" $scalar"; </div><div class="t m0 x21 h5 ycb ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x21 h5 yca ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 ycc ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">则</span>$scalar<span class="_ _4a"> </span><span class="ff4">将为被<span class="ff5 ls5">插且</span>被转变为标量<span class="_ _8"></span>的<span class="ff5">值</span>。这里有一<span class="_ _8"></span>个<span class="ff5 ls5">警告</span>:<span class="ff5">任</span><span class="ls5">何一个特</span><span class="ff5">殊</span><span class="ls5">字符<span class="_ _4"></span>都将被</span></span></div><div class="t m0 x2 h3 ycd ff4 fs1 fc0 sc0 ls0 ws0">正则表达式引<span class="ff5">擎影响</span>,并<span class="ff5">且</span>可能引<span class="ff5">起</span>语法<span class="ff5">错误</span>。因此,如果标量为:<span class="ff3"> </span></div><div class="t m0 x2 h5 yce ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 ycf ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 yce ff3 fs2 fc0 sc0 ls9 ws0"> $scalar = " ({";</div><div class="t m0 x2d h5 ycf ff3 fs2 fc0 sc0 ls9 ws0">$scalar = " ({";<span class="_ _26"></span>$scalar = " ({";</div><div class="t m0 x2d h5 yce ff3 fs2 fc0 sc0 ls9 ws0">$scalar = " ({"; </div><div class="t m0 x19 h5 ycf ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x19 h5 yce ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yd0 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">那么输入如下代码:</span> </div><div class="t m0 x2 h5 yd1 ff3 fs2 fc0 sc0 ls9 ws0"> $variabie =~ m" $scalar" ;</div><div class="t m0 x2 h5 yd2 ff3 fs2 fc0 sc0 ls9 ws0"> $variabie =~ m" $scalar" ;<span class="_ _28"></span> $variabie =~ m" $scalar" ;</div><div class="t m0 x2 h5 yd1 ff3 fs2 fc0 sc0 ls9 ws0"> $variabie =~ m" $scalar" ; </div><div class="t m0 x1f h5 yd2 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1f h5 yd1 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yd3 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff5">就<span class="ff4">等</span>价<span class="ff4">于是<span class="_ _8"></span><span class="ff5">说<span class="ff4">:<span class="ff3">$vari<span class="_ _8"></span>able =~ m"({"<span class="_ _8"></span><span class="ff4">,而这是一<span class="_ _8"></span>个运行时语法<span class="ff5 ls5">错误</span>。如果<span class="_ _8"></span>表达式为如下</span></span></span></span></span></span></div><div class="t m0 x2 h3 yd4 ff4 fs1 fc0 sc0 ls0 ws0">形式:<span class="ff3"> </span></div><div class="t m0 x2 h5 yd5 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 yd6 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 yd5 ff3 fs2 fc0 sc0 ls9 ws0"> $scalar = quotemeta(' ({');</div><div class="t m0 x2d h5 yd6 ff3 fs2 fc0 sc0 ls9 ws0">$scalar = quotemeta(' ({');<span class="_ _4b"></span>$scalar = quotemeta(' ({');</div><div class="t m0 x2d h5 yd5 ff3 fs2 fc0 sc0 ls9 ws0">$scalar = quotemeta(' ({'); </div><div class="t m0 x4c h5 yd6 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x4c h5 yd5 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yd7 ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">则表达式会使</span>$scalar<span class="_ _2"> </span><span class="ff4">变为\</span>(<span class="ff4">\</span>{<span class="ff4">,<span class="ff5">且</span>把</span>$scalar<span class="_ _2"> </span><span class="ff4">替换为:</span> </div><div class="t m0 x2 h5 yd8 ff3 fs2 fc0 sc0 ls9 ws0"> </div><div class="t m0 x2 h5 yd9 ff3 fs2 fc0 sc0 ls9 ws0"> <span class="_ _2e"></span> </div><div class="t m0 x2 h5 yd8 ff3 fs2 fc0 sc0 ls9 ws0"> $variable =~ m" </div><div class="t m0 x2d h5 yd9 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m" <span class="_ _26"></span>$variable =~ m" </div><div class="t m0 x2d h5 yd8 ff3 fs2 fc0 sc0 ls9 ws0">$variable =~ m" <span class="ff4 ls0">\</span></div><div class="t m0 x19 h6 yd9 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x19 h5 yd8 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3">(</span></div><div class="t m0 xe h5 yd9 ff3 fs2 fc0 sc0 ls0 ws0">(<span class="_ _f"></span>(</div><div class="t m0 xe h5 yd8 ff3 fs2 fc0 sc0 ls0 ws0">(<span class="_ _4"></span><span class="ff4">\</span></div><div class="t m0 x17 h6 yd9 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _f"></span>\</div><div class="t m0 x17 h5 yd8 ff4 fs2 fc0 sc0 ls0 ws0">\<span class="_ _4"></span><span class="ff3 ls9">{" ;</span></div><div class="t m0 x1b h5 yd9 ff3 fs2 fc0 sc0 ls9 ws0">{" ;<span class="_ _2e"></span>{" ;</div><div class="t m0 x1b h5 yd8 ff3 fs2 fc0 sc0 ls9 ws0">{" ; </div><div class="t m0 x1d h5 yd9 ff3 fs2 fc0 sc0 ls0 ws0"> <span class="_ _f"></span> </div><div class="t m0 x1d h5 yd8 ff3 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 yda ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">这样<span class="ff5">才</span>可以匹配到读者<span class="ff5">愿</span>意匹配的字符串</span>({<span class="ff4">。</span> </div><div class="t m0 x2 h3 ydb ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 ydc ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2 h3 ydb ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 ydd ff3 fs1 fc0 sc0 ls0 ws0">9</div><div class="t m0 x2 h3 yde ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _3"></span>9</div><div class="t m0 x2 h3 ydd ff3 fs1 fc0 sc0 ls0 ws0">9<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 x8 h4 yde ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 x8 h3 ydd ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3">3</span></div><div class="t m0 x9 h3 yde ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>3</div><div class="t m0 x9 h3 ydd ff3 fs1 fc0 sc0 ls0 ws0">3<span class="_ _4"></span><span class="ff4">.</span></div><div class="t m0 xa h4 yde ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _5"></span>.</div><div class="t m0 xa h3 ydd ff4 fs1 fc0 sc0 ls0 ws0">.<span class="_ _4"></span><span class="ff3 ls4">5 </span></div><div class="t m0 xb h3 yde ff3 fs1 fc0 sc0 ls4 ws0">5 <span class="_ _5"></span>5 </div><div class="t m0 xb h3 ydd ff3 fs1 fc0 sc0 ls4 ws0">5 <span class="ff4">原则</span></div><div class="t m0 x2a h4 yde ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _7"></span>原则</div><div class="t m0 x2a h3 ydd ff4 fs1 fc0 sc0 ls4 ws0">原则<span class="_ _2"> </span><span class="ff3 ls0">5</span></div><div class="t m0 x2b h3 yde ff3 fs1 fc0 sc0 ls0 ws0">5<span class="_ _3"></span>5</div><div class="t m0 x2b h3 ydd ff3 fs1 fc0 sc0 ls2 ws0">5 </div><div class="t m0 x2c h3 yde ff3 fs1 fc0 sc0 ls0 ws0"> <span class="_ _3"></span> </div><div class="t m0 x2c h3 ydd ff3 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m0 x2 h3 ydf ff3 fs1 fc0 sc0 ls0 ws0"> <span class="ff4">正则表达式在<span class="ff5">求值</span>的过程中<span class="ff5">产生两</span>种情况:结果<span class="ff5">状态</span>和<span class="ff5">反向</span>引用。</span> </div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>