JAVA进阶-正则表达式

正则表达式原理

有关正则表达式的原理,请参考我的另一篇博客
正则表达式
 
 

正则表达式在JAVA中的应用

正则表达式在JAVA中的类

正则表达式在JAVA中主要有三个类,Pattern 类,Matcher 类,PatternSyntaxException 异常类

  • Pattern 类:

    pattern 对象是一个正则表达式的编译表示。

    Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

	Pattern p = Pattern.compile("正则表达式");  //创建Pattern类的实例
  • Matcher 类:

    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

    可认为,匹配后所需要的结果都保存在matcher对象当中,调用相应的方法就可以得到。

	Pattern p = Pattern.compile("正则表达式");  //创建Pattern类的实例
 	Matcher m = p.matcher("匹配的字符串");	   //创建 matcher类的实例
  • PatternSyntaxException:

    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
     
     
     

检测是否匹配(一次性)

Pattern.matches(pattern, content);可以用来返回字符串与模式是否匹配。

可以不用实例化Pattern对象。

适合只使用一次的检测是否匹配的情况。

第一个参数是正则表达式,第二个参数是要匹配的字符串。

import java.util.regex.Pattern; //注意导入包

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String content = "I am boy "; 匹配串

		String pattern = ".*boy.*";	 匹配模式

		boolean isMatch = Pattern.matches(pattern, content);
		System.out.println("字符串中是否包含了 'boy' 子字符串? " + isMatch);
	}

输出:
在这里插入图片描述

 
 

检测是否匹配(通常)

通常需要重复使用正则表达式的时候,需要将正则表达式编译为Pattern类的实例。

	Pattern p = Pattern.compile("正则表达式");  //创建Pattern类的实例
 	Matcher m = p.matcher("匹配的字符串");
 	boolean b = m.matches();
	常用的Matcher实例方法:
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	      // 按指定模式在字符串查找
      String input = "This order was placed for QT3000! OK? orderdddorderjjjorder";
      String pattern = "(\\D*)(\\d+)(.*)";
      					//(非数字) (数字) (任意字符串)
	      
	 
	      // 创建 Pattern 对象
	      Pattern p = Pattern.compile(pattern);
	      Pattern newP = Pattern.compile("order");
	      // 现在创建 matcher 对象
	      Matcher m = p.matcher(input);
	      
	      System.out.println("返回该匹配器解释的模式: "+m.pattern());
	      
	      m.usePattern(newP);
	      System.out.println("更改匹配器解释的模式: "+ m.pattern());
	      
	      System.out.println("寻找下一个匹配位置: "+ m.find());
	      System.out.println("返回匹配的起始: "+ m.start());
	      System.out.println("返回匹配的末端: "+ m.end());

	      while (m.find()) { //寻找下一个匹配
		      System.out.println("返回匹配的起始: "+ m.start());
		      System.out.println("返回匹配的末端: "+ m.end());
		}

	}

输出:
在这里插入图片描述

捕获组

有关捕获组的概念,请参考正则表达式


	public static void main(String[] args) {
		// TODO Auto-generated method stub
	      // 按指定模式在字符串查找
	      String input = "This order was placed for QT3000! OK?";
	      String pattern = "(\\D*)(\\d+)(.*)";
	      					//(非数字) (数字) (任意字符串)
	      
	 
	      // 创建 Pattern 对象
	      Pattern p = Pattern.compile(pattern);
	      // 现在创建 matcher 对象
	      Matcher m = p.matcher(input);
	      
	      if (m.find( )) {
	          System.out.println("Found value: " + m.group(0) ); //输入的匹配字符串
	          System.out.println("Found value: " + m.group(1) ); //从左到右的匹配()
	          System.out.println("Found value: " + m.group(2) );
	          System.out.println("Found value: " + m.group(3) ); 
	       } else {
	          System.out.println("NO MATCH");
	       }
	    }

输出:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值