//正则表达式的使用
public class Test {
public static void main(String[] args) {
String str = "aa";
String regex = "a";
boolean f = str.matches(regex);
//数量
//*:代表0个或多个
//+:代表1个或多个
//?:代表0个或1个
str = "a";
regex = "a?";
//{m,n}:代表最少m个最多n个,包含边界
//{m}:代表m个
//{m,}:代表最少m个
str = "aaaaa";
regex = "a{2,3}";
regex = "a{4}";
regex = "a{4,}";
f = str.matches(regex);
//特殊集合
//\d:代表数字\D:非数字
//\w:代表数字、字母、下划线\W:非数字、字母下划线
//\s:代表 回车、换行、空格等空白符\S:非空白符
str = "2a_@000";
regex = "\\d+";
regex = "\\w+";
str = " a";
regex = "\\s+";
f = str.matches(regex);
//转义:\
//23+34
str = "23+45";
regex = "\\d+\\+\\d+";// \\+就表示加号,而单独的一个 “+”表示多个
//匹配\
str = "\\\\";
regex = "\\\\\\\\";//regex表示正则表达式:\\配一个\
f = str.matches(regex);
//[]:只能包含的内容
//[a-z]小写字母 [A-Z]大写字母 [a-zA-Z]字母 [0-9]数字
str = "as2_dab";
regex = "[a-z_12]+";//a到z的小写字母并且还包括下划线和数字12
f = str.matches(regex);
//.:代表任意的字符,除了换行
str = "-sad";
regex = ".+";//一个点表示一个字符,加上一个“+”就表示多个
//匹配小数
str = "12.345";
regex = "\\d+\\.\\d+";
f = str.matches(regex);
//^:以。。。开头
//$:以。。结尾
//[^]::不包含
str = "aAd";
regex = "^a[^a-z]{1,}d$";
f = str.matches(regex);
//分组:()
//匹配ip
str = "192.168.1.200";
regex = "(\\d{1,3}\\.){3}\\d{1,3}";
f = str.matches(regex);
//分割字符串
String[] temp = str.split("\\.");
for(String s:temp){
System.out.println(s);
结果为:192
168
1
200
}
System.out.println(f);
//Pattern Matcher
获取:
1),先要将正则表达式编译成正则对象。使用的是Pattern中静态方法 compile(regex);
2),通过Pattern对象获取Matcher对象。
Pattern用于描述正则表达式,可以对正则表达式进行解析。
而将规则操作字符串,需要从新封装到匹配器对象Matcher中。
然后使用Matcher对象的方法来操作字符串。
如何获取匹配器对象呢?
通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。
3),使用Matcher对象中的方法即可对字符串进行各种正则操作。
Pattern pattern = Pattern.compile("a*b");//compile将给定的正则表达式编译到模式中。
Matcher mathcer =pattern.matcher("aabaaabasbaabaaaaaaabaaaabaadasb");
while(mathcer.find()){//是否有找到匹配,有就往下执行
String ss = mathcer.group();//匹配到子序列
System.out.println(ss+" 开始于"+mathcer.start()+" 结束于:"+mathcer.end());
结果为:
aab 开始于0 结束于:3
aaab 开始于3 结束于:7
b 开始于9 结束于:10
aab 开始于10 结束于:13
aaaaaaab 开始于13 结束于:21
aaaab 开始于21 结束于:26
b 开始于31 结束于:32
}
^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明:
"^The":开头一定要有"The"字符串;
"of despair$": 结尾一定要有"ofdespair" 的字符串;
"^abc$":就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
"notice":匹配包含notice的字符串
你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边
'*','+',和'?',
他们用来表示一个字符可以出现的次数或者顺序.他们分别表示:
"zeroor more"相当于{0,},
"one or more"相当于{1,},
"zeroor one."相当于{0,1}, 这里是一些例子:
"ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a","ab", "abbb", 等);
"ab+":和ab{1,}同义,同上条一样,但最少要有一个b存在("ab","abbb", 等.);
"ab?":和ab{0,1}同义,可以没有或者只有一个b;
"a?b+$":匹配以一个或者0个a再加上一个以上的b结尾的字符串.
要点,'*', '+',和'?'只管它前面那个字符.
你也可以在大括号里面限制字符出现的个数,比如
"ab{2}":要求a后面一定要跟两个b(一个也不能少)("abb");
"ab{2,}":要求a后面一定要有两个或者两个以上b(如"abb","abbbb", 等.);
"ab{3,5}":要求a后面可以有3-5个b("abbb","abbbb", or "abbbbb").
现在我们把一定几个字符放到小括号里,比如:
"a(bc)*":匹配 a后面跟0个或者一个"bc";
"a(bc){1,5}":一个到5个"bc."
还有一个字符'│',相当于OR操作:
"hi│hello":匹配含有"hi"或者 "hello"的字符串;
"(b│cd)ef":匹配含有 "bef"或者"cdef"的字符串;
"(a│b)*c":匹配含有这样多个(包括0个)a或b,后面跟一个c的字符串;
一个点('.')可以代表所有的单一字符,不包括"\n",如果,要匹配包括"\n"在内的所有单个字符,怎么办?
对了,用'[\n.]'这种模式.
"a.[0-9]":一个a加一个字符再加一个0到9的数字
"^.{3}$":三个任意字符结尾 .
中括号括住的内容只匹配一个单一的字符
"[ab]":匹配单个的 a或者 b( 和 "a│b"一样);
"[a-d]":匹配'a'到'd'的单个字符(和"a│b│c│d"还有"[abcd]"效果一样);一般我们都用[a-zA-Z]来指定字符为一个大小写英文
"^[a-zA-Z]":匹配以大小写字母开头的字符串
"[0-9]%":匹配含有 形如x%的字符串
",[a-zA-Z0-9]$":匹配以逗号再加一个数字或字母结尾的字符串
你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^'作为开头"%[^a-zA-Z]%"匹配含有两个百分号里面有一个非字母的字符串.
要点:^用在中括号开头的时候,就表示排除括号里的字符