正则表达式用法

正则表达式

一. 正则表达式

regex  :用于处理字符串,如字符串的匹配,字符串的查找,字符穿的替换.

 

Regex涉及的类

 java.lang.String 

 Java.util.regex.Pattern

 java.util.regex.Matcher

 

注意: \java中表示转译字符  所以java正则表达式中需要使用两个\表示一个\.

 

二. 正则表达式基本使用方法

   第一种方法

    “abc”.matches(“...”); 使用方便但是每次都需要编译在多次使用中速度相比第二种会慢些

  第二种方法

     Pattern p = Pattern.compile(“...”);     将给定的正则表达式编译到模式中

    Matcher m = p.matcher(“[z-a]{3}); 编译给定正则表达式并尝试将给定输入与其匹配

    m.matches(); 输出结果

 

三. 正则表达式常用符号

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Regex {

	
	public static void main(String[] args) {

		//.:任何字符  *: 零次或多次  +:一次或多次  ?: 一次或一次没有
		p("aaaa".matches("a"));						//false                 
		p("aaaa".matches("a*"));					//true
		p("aaaa".matches("a+"));					//true
		p("a".matches("a?"));						//true
		p("".matches("a*"));						//true
		p("".matches("a?"));						//true
		p("aaaa".matches("aaaa"));					//true
		p("3215345466".matches("\\d{3,100}"));		//true
		p("192".matches("[1-2][0-9][0-9]"));		//true
		
		
		//\d : 数字[0-9]  \s 空白字符   \w单词字符 [a-zA-Z_0-9]		\D: [^\d]     /W: [^\w]   \s: [^\s]
		p(" \t\r\n".matches("\\s{4}"));    							//true
		p("a_w".matches("\\w{3}"));									//true
		p("asd454534&^%$".matches("\\w{1,3}\\d+[%^&$]+"));			//true
		p(" ".matches("\\S"));										//false
		p("\\".matches("\\\\"));									//true  一个\用连个\\代替
		p("asd".matches("\\D+"));									//true
		
		
		//[]范围(一个[]值匹配一个字符)  [^a] 除了a 
		p("a".matches("[abc]"));			//true
		p("a".matches("[a-z]"));			//true
		p("a".matches("[a-zA-Z]"));			//true
		p("a".matches("[a-z]|[A-Z]"));		//true
		p("a".matches("[a-z[A-Z]]"));		//true		并集
		p("a".matches("[^abc]"));			//false		
		p("a".matches("[A-Z&&[RSD]]"));		//false    交集 只能是RAD  
		
		
		//^ 行的开头    $ 行的结尾   /b单词边界
		p("hello sir".matches("^h.*"));			//true
		p("hello sir".matches(".*ir$"));		//true
		p("hello sir".matches("^h.*\\b.*ir*"));	//true
		p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));//true
		p("34343".matches("[\\w]*"));			//true
		p("34343".matches("\\w*"));				//true
		
		
	}

	public static void p(Object o) {
		System.out.println(o);
	}
}

四. 方法

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Regex {

	
	public static void main(String[] args) {
		
		// java.lang.String类中 String replaceAll(String regex, String replacement) 方法用于替换
		p("asd34564565".replaceAll("\\d", "-"));     //将数字替换为=
		
		
		//reset ,  find  ,start  end  , lookingAt  方法
		Pattern p = Pattern.compile("\\d{3,5}");
		Matcher m = p.matcher("00125-15245-654-0055");
		p(m.matches());                            //false   matches用于匹配整个字符串                    
		
		m.reset();						//  重置匹配器    matches已经将字符串的前几位使用之后不会将使用的字段吐出 需要经过重置将字符串恢复
		
		p(m.find());					//find  尝试查找与该模式匹配的输入序列的下一个子序列   返回boolean
		p(m.start() + "-" + m.end());	// start  end 返回在以前匹配操作所捕获的子序列的初始索引   结尾词(不包含)   适合与find一起使用
		
		p(m.find());
		p(m.start() + "-" + m.end());
		
		p(m.find());
		p(m.start() + "-" + m.end());
		
		p(m.find());
		p(m.start() + "-" + m.end());
		
		p(m.find());
		p(m.lookingAt());				//从字符串开头开始匹配   只会匹配第一个出现的子序列   返回boolean
		p(m.lookingAt());
		
	}

	public static void p(Object o) {
		System.out.println(o);
	}
}

五. 替换与分组

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Regex {

	
	public static void main(String[] args) {
		
		//替换
		Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);                 //Pattern.CASE_INSENSITIVE   不区分大小写
		Matcher m = p.matcher("javajava JaVa jAva Javajava Ilovejava lovejava sdfffs javadf");
		StringBuffer sbf = new StringBuffer();
		int i = 0;
		
		while(m.find()) {
			p(m.group());								//group  将找到的子序列打印出来
			i++;
			
			if(i % 2 == 0) {
				m.appendReplacement(sbf, "java");		//appendReplacement   将找到的一个子序列替换并添加到StringBuffer里
			}else {
				m.appendReplacement(sbf, "JAVA");
			}
		}
		
			m.appendTail(sbf);							//将剩余序列添加到缓冲区
			p(sbf);
			
			
			
		//分组  一个小括号为一个分组   组号以左括号为主
		Pattern p = Pattern.compile("(\\d{3,5})([a-zA-Z]{2})");
		Matcher m = p.matcher("223aa-33445vv-33445566dd-cc");
		while(m.find()) {
			p(m.group(1));       //group(int)   找到第一个分组的内容
		}
		
		
	}

	public static void p(Object o) {
		System.out.println(o);
	}
}


 

六.总结

       这是一一个学习日志,这篇日志写了很长时间,以后我会加快速度去学习剩下的内容.我希望能有人关注我写的内容,帮我找一些日志中的错误和不足,大家一起学习.我回将写日志的方法一直保持下去,这样可以巩固当天的学习内容,也方便以后的复习.

      再多一点努力,就多一点成功.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值