正则表达式(regular expression)

来源:互联网 发布:淘宝css颜色代码 编辑:程序博客网 时间:2024/05/23 19:13
由于上面的例子程序使用随机数生成输出,且每一次的输出都与下一次输出不同,所以
expect() 函数无法知道确切的输出。要解决这个问题,可以在expect()中使用正则表
达式。这是 Java JDK 1.4 中引入的新特性(但在 Perl 和 Python 中早就有了)。虽然
要到第十二章我们才用到了这个非常强大的工具,但是现在我们还是需要学习一些正则表达
式的知识,以便理解这些语句。这里我们只需要读懂 expect()语句,如果你想全面地了解
正则表达式,可以参考 JDK 文档中的 java.util.regex.Pattern。


正则表达式是使用通用术语(general terms)来描述字符串的一种方法。你可以说:“如果
一个字符串包含这些东西,那么它与我要找的东西相匹配。”例如,要表达一个数可能有,
也可能没有负号,你可以在负号后面跟一个问号,就像下面这样:




-?




要表示一个整数,你可以描述其具有一位或多位数字。在正则表达式中,一个数位用’\d’
表示,但在 Java 的字符串类型中,我们必须添加一个反斜线才能“转义”表达出反斜
线:’\\d’。在正则表达式中要说明有“一个或多个前述的表达式”,就要使用’+’。所以
要表达“可能有负号,后面有一个或多个数位”,我们要这样写:




-?\\d+




这就是前面代码 expect()语句中的第一行。


在 expect()方法中的各行的开头部分,’%%’不是正则表达式的语法(注意,包含空格是
为了可读性),而是一个标记,simpletest 使用它来表示这一行余下的部分是一个正则表
达式。所以在标准的正则表达式中是不会看到它的,它只在 simpletest 的 expect()语
句中出现。


对于其他的字符,只要不是正则表达式专有的特殊字符,都要求精确匹配。所以在第一行代
码中:




%% j = -?\\d+




‘j=’需要准确匹配。但是,在第三行中,’j+k’中的’+’需要转义,因为它是正则表达式
的特殊字符,同样的还有’*’。通过前面的介绍,这一行余下的代码你应该能理解了。在后
 






面,expect()还会使用到正则表达式其他的特性,到时候我们再解释。






一元加、减操作符


一元减号(-)和一元加号(+)与二元加号和减号都是相同的符号。根据表达式的书写形式,
编译器会自动判断出使用的是哪一种。例如下述语句:




x = -a;




它的含义是显然的。编译器能正确识别下述语句:




x = a * -b;




但读者会被搞糊涂,所以最好更明确地写成:




x = a * (-b);




一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,它实际并不做任何

事情。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 满月宝宝眼白黄怎么办 坐飞机随身携带行李超重怎么办 婴儿换环境哭闹怎么办 美易分最后联系专员怎么办 三星手机启动不了怎么办 三星a5无法开机怎么办 三星c5死机了怎么办 三星c7无法开机怎么办 老式冰箱不制冷怎么办 电视灰屏了怎么办 沙发床放不下来怎么办 付款收据丢了怎么办 小红书登陆不上怎么办 超出范围的外卖怎么办 新氧订单过期怎么办 夏普电视遥控器失灵怎么办 西门子冰箱噪音大怎么办 高原饭煮不熟怎么办 电饭煲内胆坏了怎么办 电饭煲胶圈掉了怎么办 调温耦合器坏了怎么办 电饭煲主板坏了怎么办 meidea电饭煲出现c1怎么办 冰箱密封条长了怎么办 冰箱冷冻门变形怎么办 海尔冰箱冷藏室结冰怎么办 西门子冰箱冷藏室结冰怎么办 冰箱老是有霜冻 怎么办 冰箱里很多霜冻怎么办? 冰箱里有霜冻怎么办 冰柜冰堵了怎么办 冰箱总是冰堵怎么办 冰箱保鲜门关紧怎么办 冰箱门不能关了 怎么办 冰箱门开了一天怎么办 购物卡到期了怎么办 装修尾款不给怎么办 空调吹的风不凉怎么办 华林购物卡怎么办 京东e卡刷単被骗怎么办 苏宁信用卡退款怎么办