一、正则表达式的介绍
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) |