一、正则表达式的介绍
1、正则表达式的定义:记录文本规则的代码
eg: 10:20->使用\d代表一个数字->规则代码: \d\d:\d\d
2、正则表达式组成与名词解释:
①元字符:具有特殊含义的符号,如:\d代表一个数字
②普通字符:普通语言中的单词
③匹配:字符串与正则表达式是否等价
3、正则表达式解决哪些问题:
①随时间变化的文本,如时间显示。
②多语言适配问题,可将多语言字符串写成一个UI对象。
③多种不同的字符显示情况,如定制机,移动要求显示一种,联通又要求显示为另一种。
④字符串处理利器,字符串的匹配查找、替代、拆分、萃取。
二、正则表达式元字符
常用元字符:
. | 表示任意一个字符 |
\s | 空格字符(空格键,tab,换行,换页,回车) |
\S | 非空格字符([^\s]) |
\d | 一个数字,(相当于[0-9]) |
\D | 一个非数字的字符,(相当于[^0-9]) |
\w | 一个单词字符(word character)(相当于[a- A-Z_0-9]) |
\W | 一个非单词的字符,[^\w] |
^ | 一行的开始 |
$ | 一行的结尾 |
\b | 一个单词的边界 |
\B | 一个非单词的边界 |
[] | 匹配方括号内的一个字符 例如:[abc]表示字符a,b,c中的任意一个(与a|b|c相同) [a-z A-Z]表示从a到z或A到Z当中的任意一个字符 |
正则表达式常用表示次数的元字符
* | 重复零次或更多次 例如:a*匹配零个或者多个a |
+ | 重复一次或者更多次 例如:a+匹配一个或者多个a |
? | 重复零次或一次 例如:a?匹配零个或一个a |
{n} | 重复n次 例如:a{4}匹配4个a |
{n,} | 重复n次或者更多次 例如:a{4,}匹配至少4个a |
{n,m} | 重复n到m次 例如:a{4,10}匹配4~10个a |
正则表达式中文字符匹配
正则表达式也支持Unicode码,汉字范围可使Unicode来表示
①[\u4E00-\u9FA5]汉字
②[\uFE30-\uFFA0]全角字符
③匹配双字节字符(包括汉字在内):[^\x00-\xff]
三、正则表达式匹配示例
字符串 | 模糊匹配 | 较精确匹配 |
12:12 | \d+:\d+ | \d\d:\d\d |
2013-10-24 星期四 | \d+-\d+-\d+ 星期[\u4E00-\u9FA5] | \d{4}-\d{2}-\d{2} 星期[一二三四五六日] |
5:25PM | \d+:\d+[AP]M | \d?\d+:\d\d[AP]M |
下午4:40 | .午\d+:\d+ | [上下]午\d?\d:\d\d |
Ip地址 | (\d+\.){3}\d+ | (\d?\d?\d\.){3}\d?\d?\d |
邮箱地址 | \w@\w.\w | ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+ |
场景字符串的匹配
文件大小 | 数字 | 单位 | 数字 |
1GB | 整数 | GB | 整数或小数 |
1KB | 小数 | MB | \d+|\d+\.\d+ |
500 B | 空格 | KB | 单位 |
... | B | [GMK]?B |
(\d+|\d+\.\d+)\s?[GMK]?B
四、正则表达式操作
正则表达式相关操作
Uiselector涉及到字符串的搜索条件:
文本条件搜索
描述条件搜索
类名条件搜索
资源ID条件搜索
Java文本处理操作:
匹配字符串
替换字符串
萃取字符串
拆分字符串
正则表达式相关API
只要是文本字符串都可以使用正则表达式
描述 | UiantomatorAPI |
正则文本匹配 | textMatches(regex) |
正则描述匹配 | descriptionMatches(regex) |
正则类名匹配 | classNameMatches(regex) |
正则资源ID匹配 | resourceIdMatches(regex) |
描述 | JAVA API |
匹配字符串 | Matcher(regex) |
替换字符串 | Replace(regex.input) |
萃取字符串 | Matcher.group() |
拆分字符串 | Split(regex) |