正则表达式

正则表达式

根据规则快速匹配信息Pattern
是最终类
正则表达式的基本原理
正则表达式是对字符串进行操作的
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
正则表达式经常被用来检索,匹配,修改符合一定规则的字符串。
正则表达式的优点:
用一些特定的符号代替一些代码操作,这样可以简化书写。
可以迅速地用极简单的方式达到字符串的复杂控制。
灵活性、逻辑性和功能性非常的强。
学习要点:
正则表达式是就是在学习一些特殊符号的使用。
学习字符串的匹配,切割,替换,获取
常用的正则表达式:

 [abc] 表示一个字符串只能有一个字符,他可以是a,b,c中的一个
 [abc][a-z] 第一个字符如上,第二个字符是a到z中的一个
 [^abc]除了abc的以外的字符
 [a-zA-Z]  a-z大小写都行

 \d 数字:[0-9] 
 \D 非数字: [^0-9] 
 \s 空白字符:[ \t\n\x0B\f\r] 
 \S 非空白字符:[^\s] 
 \w 单词字符:[a-zA-Z_0-9] 
 \W 非单词字符:[^\w] 

  X?  表示有一个或者一个也没有
  X+ 表示一次或多次
  X* 表示零次或多次
  X{n}  恰好n次
  X{n,}  至少n次
  X{n,m}  至少n次,最多m次

代码:

       public static void main(String[] args) {
    	 //匹配字符串abc
    	  String str="abc";
    	  System.out.println("abc".equals(str));
    	  //1.匹配规则
    	  Pattern p= Pattern.compile("abc");
    	  //2.指定匹配规则
    	   Matcher m= p.matcher(str);
    	    //做匹配
    	   System.out.println(m.matches());
    }
    }
----

    public class PatternDemo2 {
      public static void main(String[] args) {
    	String s="\t";
    	//System.out.println(s.matches("abc"));
    	
    	//匹配小写英文字母
    	//[起始,结束]表示范围里面其中的一个
    	System.out.println(s.matches("\\\t"));//只能匹配一个
    	//匹配除x/y/z外的其他字符"[^xyz]"^表示取反
    	
    	//如何匹配"."  用"\\."匹配  
    	//匹配"\"  用"\\\\" 匹配
    	//\t  用\\\t 或\t 匹配   
    	//如何匹配多个 [a-z].+[]\\d  类似于+的这种字符控制字符出现的个数
    	//数量词修饰的是前面的字符 +--表示前面的字符最少出现一次
    	//匹配以a开头,以数字结尾最多三个字符//a.?[0-9]
    	//?--表示前面的字符最多出现一次。
    	//匹配以a开头,以b结尾的字符串"a.*b"
    	//*代表前面的字符可以出现也可以不出现
    	//匹配5个a的字符串a{5}
    	//{}表示前面的字符具体出现多少次
    	//匹配最少10个字符 ",{10,}"
    	//{,}左边表示最小,右边表示最大,但没有最小区间
    		
    }
    }
----

    public class PatternDemo3 {
        public static void main(String[] args) {
        //用正则表达式匹配字符串出现ab
        	String s="uabj";
        	System.out.println(s.matches(".*ab.*"));
        	//匹配两个ab
        	System.out.println(s.matches(".*ab.*ab.*"));
            //()---捕获组的意思,有几个小括号就有几个捕获组\\n表示取第几个编号
        	/**
        	 * 捕获组如何编号?以左括号开始到对应的右括号结束
        	 * 利用捕获组进行匹配叠字
        	 */
    	}	
    }
----

    public class PatternDemo4 {
      public static void main(String[] args) {
    	String s="aafjn33fk24332f22f";
        //进行替换
    	System.out.println(s.replace("a", "b"));
    	//利用正则进行替换,replaceAll()
    	System.out.println(s.replaceAll("[a-z]", "+"));
    	//把数字进行快速的排序
    	String str=s.replaceAll("[^0-9]", "");
    	char[] cs=str.toCharArray();
    	Arrays.sort(cs);
    	System.out.println(Arrays.toString(cs));
        //
    	System.out.println(s.replaceAll("\\?", "+"));
    	//[ ]里面不能出现 任何数量词
    	System.out.println(s.replaceAll("\\[|\\]", "+"));
    	//如果想取另外一个表达式的值,需要通过$符号去取
    	System.out.println(s.replaceAll("(tom)(.*)(jack)", "$3$2$1"));
    	//可以去重
    	System.out.println(s.replaceAll("(.)\\1+","$1" ));
    }
    }
   

字符串的切割
要点
主要用到java.lang.String.split()
返回的是一个数组
实例

把一个带空格的字符串截取成一个字符串数组

  String str="ni shi wo   de   yan";
   //这个匹配规则表示切割的是一个或多个空格
   String regex=" +"
   String[] arr=str.split(regex);
   //得到的结果就是arr[0]="ni",arr[1]="shi",arr[2]="wo",
     arr[3]="de",arr[4]="yan"

一个要点
str.split("(.)\1")(.) 表示第一个词是一个匹配任意字符的组。一个规则被编为一个组,每个组都有一个编号,想要使用这个组可以通过\n的形式来提取,n代表的组的编号。\ \1 表示匹配第一个词,多加一个,是为了转义。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值