由于程序用到了随机数,因此输出的结果会一次和一次不一样,所以 expect()就不能再像过去那样,一字不错地告诉你会输出些什么了。要 解决这个问题, expect()语句就得用到一种 Java JDK1.4所引入 的,被称为正则表达式的新的特性(但是在Per和 Python之类的语言 里,这已经是老特性了)。尽管我们要到第12章才会全面介绍这一无比 强大的工具,但如果这里不作介绍的话,你就没法看下去了。目前,你只 要能读懂 expect()就行了,要想全面了解这部分内容,请查阅JDK文 档的 javautil. regex. Pattern部分。 正则表达式是一种用通用术语描述字符串的方法,这样你就可以说:“如 果字符串里有这些东西,那么它同我正在找的东西相匹配。”比如,要表 示一个可能有也可能没有的负号,你可以在负号后面加一个问号,就像这 表示整数,就是表示一个或多个阿拉伯数字。在正则表达式中,阿拉伯数 字用“d’表示的,但是在Java的 String里,你必须再加一个反斜杠 才能把它“转义”成一个反斜杠:“\\d’。要在正则表达式里表示“ 个或多个前述的表达式”,你就得用“+’。所以要表示“前面可能有个 减号,后边跟着一串阿拉伯数字”,你得写: ?\\d+ 这就是上面那段程序的 expect()语句的第一行。 expect()语句的各行中,开头部分的‘%%’(注意一下,空格是为 增强可读性而加的),都不属于正则表达式。这是 simpletext所使用的 标记,它表示这行剩下来的部分是一个正则表达式。所以仅从 simpletext的 expect()语句,你是看不到普通的正则表达式的。 其它字符,只要它不属于正则表达式特有的专用字符,都要求完全匹配。 所以第一行: 各号j=-21\d+ =’会做精确匹配。但是在第三行,“j+k’里面的‘+’必须进行 转义,因为跟‘*’一样,在正则表达式里它也是一个特殊字符。作完这 些介绍之后,剩下几行你就应该能看懂了。如果本书后面的 expect() 里面又用到了正则表达式的新特性的话,我们会再作解释。 第8页共48页shhgs@wgqqh.com 8 ✁ ✂ 48 ✁ `)âg,¸ê"æò©!(Oź3¨3¨X3¦DE expect( )X;Á}^+Y¦3Xîr#¡º©!ÌïZ,% £N ×cdexpect( )g3 Java JD K 1. 4 Dt (TUshi´(K(pð(F Perl Pyth on ue( Ë ôõñpð, )BòW%g 12 ûÙºc¶ 3Ü8 óÂ(yÄÄÅ ËX1(¡<+,A¡ó %;= expect( ),%|c¶,£ Rôõ JD K
²( java. u til .regex. Pattern shi´3±ö ÷(µ ¦¡ÝE$0ÍÄ Å ÷Ëm ÌøùYZAFú(øù>ûÏ8Ä%h 3×Ý;m[Ý;m(¿S¡ÝEF¿S¶ä3×cS} ¦0 -? h¤"h3×
V×üýþ"Fshi´*üýþ" [\d\h(F Java ( Strin g Ë¡Áä3× Ù;PAÍäÏ3×0[\\d\%Fshi´ËhÍ3 ×
V×(hi´Ï¡[+\DE%hͶÝ;m× PS1.3÷üýþ"Ï¡«0 -?\\d+ J¶Yâ( expect( )(3 expect( )(*a([%%\(¹3è, óÝðàä()ÆX )shi´ simpletest Dç( YAh Q(3×shi´DE simpletest ( expect( )¡<XgM(shi´( §A ó%AX )shi´pm( Æ% cû DE30 %% j = -?\\d+ [j = \ºTxûFL[j + k\˶([+\( äæ[*\3¦Fshi´ËA[3×pq 1 Ìui¡vw;<=,ÄÅ ¶( expect( ) ˶üg,shi´(Kpð(WºÁ1£