个人笔记系列 正则表达式

//正则表达式的使用

 

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个或者Nb组成的字符串("a","ab", "abbb", );
         "ab+":和ab{1,}同义,同上条一样,但最少要有一个b存在("ab","abbb", .);
         "ab?":和ab{0,1}同义,可以没有或者只有一个b;
         "a?b+$":匹配以一个或者0a再加上一个以上的b结尾的字符串.

要点,'*', '+','?'只管它前面那个字符.

你也可以在大括号里面限制字符出现的个数,比如


"ab{2}":要求a后面一定要跟两个b(一个也不能少)("abb");
"ab{2,}":要求a后面一定要有两个或者两个以上b("abb","abbbb", .);
"ab{3,5}":要求a后面可以有35b("abbb","abbbb", or "abbbbb").


现在我们把一定几个字符放到小括号里,比如:

"a(bc)*":匹配 a后面跟0个或者一个"bc";
"a(bc){1,5}":一个到5"bc."


还有一个字符'',相当于OR操作:


"hihello":匹配含有"hi"或者 "hello"的字符串;
"(bcd)ef":匹配含有 "bef"或者"cdef"的字符串;
"(ab)*c":匹配含有这样多个(包括0个)ab,后面跟一个c的字符串;


一个点('.')可以代表所有的单一字符,不包括"\n"如果,要匹配包括"\n"在内的所有单个字符,怎么办?

对了,'[\n.]'这种模式.


"a.[0-9]":一个a加一个字符再加一个09的数字
"^.{3}$":三个任意字符结尾 .

中括号括住的内容只匹配一个单一的字符


"[ab]":匹配单个的 a或者 b(  "ab"一样);
"[a-d]":匹配'a''d'的单个字符("abcd"还有"[abcd]"效果一样);一般我们都用[a-zA-Z]来指定字符为一个大小写英文
"^[a-zA-Z]":匹配以大小写字母开头的字符串
"[0-9]%":匹配含有 形如x%的字符串
",[a-zA-Z0-9]$":匹配以逗号再加一个数字或字母结尾的字符串


你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^'作为开头"%[^a-zA-Z]%"匹配含有两个百分号里面有一个非字母的字符串.

要点:^用在中括号开头的时候,就表示排除括号里的字符


猜你喜欢

转载自blog.csdn.net/jacabe/article/details/80075560