目录
1.正则表达式
1.1元字符与字符集
1.2 正则表达式
2.Java中的正则表达式
2.1 正则表达式的匹配方法
2.2 “ ”的相关知识
1.正则表达式
1.1元字符与字符集
. 点字符
匹配任何单个字符
[ ] 字符集
匹配方括号内的任意字符
[a-z],[0-9],[A-Za-z]
[^ ] 否定字符集
匹配除了方括号内里的任意字符
(xyz) 特征标群
匹配与xyz完全相等的字符串
重复次数
* 号
在*号之前的字符重复>=0次
+ 号
在+号之前的字符重复>=1次
?号
在?号之前的字符出现1次或不出现
{n} 重复次数为n
{n,} n<=重复次数
{n,m} n<=重复次数<=m
| 或运算符
匹配|符号前或后的字符
转义运算符
[ ] ( ) { } . * + ? ^ $ |
^ 从行开始匹配
$ 从末端开始匹配
字符集
1.2 正则表达式
下面根据几个具体实例来将上面所述贯穿起来
例题一:
分析:可以看到Jia(-1)Yi(0)Bing(1)可以分为三块,每一块的规则其实是相同的:大写的字母开头的名字,括号中是-1,0,1,该题的前提条件为候选人名字首字母大写,且候选人个数>=1
正则表达式 ([A-Z][a-zA-Z]*(((-1)|0|1)))+
例题二:
分析:数字在1到10之间的整数或正整数后带小数点0.5,所以1-9开头的既可以为整数,也可以为带.5的小数,10也可以,但10.5不行
正则表达式: ([1-9](.5)?)|(10)
2.Java中的正则表达式
2.1 正则表达式的匹配方法
方法一:string.matches(regex)
string是你要匹配的字符串,regex是你写的正则表达式(注意要变成\,详细看2.2)
public static boolean isNumber(String s){
return s.matches("^[-\+]?[.\d]*$");
}
方法二:Pattern和Matcher
string是你要匹配的字符串,regex是你写的正则表达式
Pattern是对regex正则表达式进行编译之后得到的结果,将正则表达式变成一个正则标准
把规则编译成一个模式对象,通过这个模式对象的matcher方法得到一个匹配器对象Macher m
调用匹配器对象m的方法,比如m.matches()就是匹配字符串,m.find()就是找与正则表达式匹配的子串
public static boolean matches(String regex, String s) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
return m.matches();
}
String.matches(regex)方法本质调用了Pattern.matches(regex, str),而该方法调Pattern.compile(regex).matcher(input).matches()方法,而Matcher.matches()方法试图将整个区域与模式匹配,如果只是想要匹配字符串,那么用方法一就可以了。
2.2 “ ”的相关知识
把每个 都变成 \
(1)识别字符串“ ”
Java中是不允许直接表示为“ ”的,会报错,应该表示为“ \ ”
这是因为在字符串中”一个 表示转义,java读到 知道要转义了,所以 \ 会转成
同理 \\ 会转为 \
回到刚刚的问题--识别一个字符串“ ”,按照正则表达式,会得到 \ ,在Java中就是“ \\ ”
(2)识别字符串“ \ ”
如果我还是没改变正则表达式,那么可定是不匹配的
改正则表达式为“ \* ”,就是匹配 出现0或多次的字符串
综上,会写正则表达式,搬到java中就是将 无脑乘2,把每个都变成 \



