正则表达式

正则表达式:符合一定规则的表达式。

l 作用:用于专门操作字符串。

l 特点:用一些特定的符号来表示一些代码操作,这样就简化书写

l 学习正则表达式就是在学习一些特殊符号的使用。

l 好处:可以简化对字符串的复杂操作。

l 弊端:符号定义越多,正则越长,阅读性越差。

 

正则表达式常见符号表示的含义:

构造                匹配

字符

\t                   制表符

\n                   换行符

\r                    回车符

\f                    换页符

 

字符类

[abc]                 a、b或c(简单类)

[^abc]                任何字符,除了abc

[a-zA-Z]              字母

[a-d[m-p]             并集

[a-z&&[def]]          交集

[a-z&&[^bc]]          a-z,除了bc

[a-z&&[^m-p]]         a-z,除去m到p.

 

预定义字符

.                      任何字符

\d                     数字

\D                     非数字

\s                      空白字符

\S                     非空白字符

\w                     单词字符[a-zA-Z_0-9]

\W                     非单词字符

 

边界匹配器

^                       行的开头

$                       行的结尾

\b                      单词边界

\B                      非单词边界

\A                      输入的开头

\G                      上一个匹配器的结尾

\Z                      输入的结尾,仅用于最后的结束符

\z                       输入的结尾

 

Greedy数量词

X?                      一次或一次也没有

X*                      零次或多次

X+                      一次或多次

X{n}                    恰好n次

X{n,}                    只是n次

X{n,m}                  至少n次,但不超过m次

 

具体功能:

①匹配:String类 boolean /  matches(String regex)方法.用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

练习:匹配QQ号,都是数字,不能以0开头,长度为5~15位。      

MatchesDemo。Java

 

②切割:String类     String[]  / split(String regex)

示例:String str=”zhangsan.lisi.angwu”按照.切割

      规则应该这么写:String reg=”\\.”;

      String st=”G:\\abc\\fg\\ff”;按照\\切割

      规则应该这么写:String reg=”\\\\”;

      String s=”erkkkfghhfggkkdg“;按照叠词完成切割,为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号,从1开始,想要使用已有的组可以通过\n就是组的编号。

     规则应该这么写 String reg=”(.)\\1+”

 

③替换 String类 String / replaceAll(String regex,String replacement)

示例:String str=”fgg1256fhj55574jk4474”将字符串中的数字替换成#

str.replaceAll(“[0-9]{5,}”,”#”);

特殊符号:$获取组的内容,后面跟组的编号。

 

④获取:将符合规则的子串取出

操作步骤:1.将正则表达式封装成对象

          2.让正则表达式和要操作的字符串相关联

          3.关联后,获取正则匹配引擎

          4.通过引擎对符合规则的子串进行操作,比如取出。

 

Java.util.regex包中的Pattern类

  正则表达式的编译表示形式。重要方法:

static Pattern / compile(String regex):将给定的正则表达式编译到模式中。

Matcher       / matcher(CharSequence input):创建匹配给定输入此模式的匹配器。

Matcher类

Int / end():返回最后匹配字符之后的偏移量

Int / start():返回以前匹配的初始索引

Boolean / find():尝试查找与该模式匹配的输入序列的下一个子序列。

String / group():返回由以前匹配操作所匹配的输入子序列。

 

对于具体应用该用那种功能的思路方式:

1.如果只想知道该字符是对是错,使用匹配

2.想要将已有的字符串编成另一个字符串,替换。

3.想要按照自定的方式将 字符串变成多个字符串,切割,获取规则以外的子串。

4.想要拿到符合需求的字符串子串,获取,获取符合规则的子串。

 

/*题目:对于给定的ip地址进行排序
*/
import java.util.*;
class RegexDemo2 
{
	public static void main(String[] args) 
	{
		String str="192,68,1,254   2,49,23,2   2,2,255,1 2,2,2,2  12,5,87,88";
        System.out.println(str);
		str=str.replaceAll("(\\d+)","00$1");
		System.out.println(str);
        str=str.replaceAll("0*(\\d{3})","$1");
        System.out.println(str);
		String[] arr=str.split(" +");
		Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
	}
}