Java-正则表达式实现和示例

正则表达式-Java

目录




内容

1、java.util.regex包

  Java把处理正则相关的类放在此包中主要用到的类Pattern 和Matcher。

1.1、Pattern

public final class Pattern
extends Object
implements Serializable

正则表达式的编译表示。

  • 使用步骤:

    • 必须首先将正则表达式(指定为字符串)编译为此类的实例。
    • 然后将所得的图案可以被用来创建一个Matcher对象可以匹配任意character sequences针对正则表达式。
    • 执行匹配的所有状态都驻留在匹配器中,所以许多匹配者可以共享相同的模式。
  • 示例:因此,典型的调用序列

       Pattern p = Pattern.compile("a*b");
       Matcher m = p.matcher("aaaaab");
       boolean b = m.matches();
    

这个类定义了一个matches方法,以便在正则表达式只使用一次时方便。 该方法编译一个表达式,并在单个调用中匹配输入序列。 该声明

boolean b = Pattern.matches("a*b", "aaaaab");

相当于上面的三个语句,尽管对于重复匹配,它的效率较低,因为它不允许编译的模式被重用。
这个类的实例是不可变的,可以安全地被多个并发线程使用。 该实例Matcher类不适合这样的使用是安全的。

  • 常用属性:给定标识
修饰符属性名描述
static intCASE_INSENSITIVE启用不区分大小写的匹配。
static intDOTALL"."点号可以匹配所有字符
static intMULTILINE启用多行模式。
  • 常用方法
修饰符返回值类型方法名参数列表描述
staticPatterncompileString regex将给定的正则表达式编译为模式。
staticPatterncompileString regex, int flags将给定的正则表达式编译为带有给定标志的模式。
MatchermatcherCharSequence input创建一个匹配器,匹配给定的输入与此模式。

1.2、Matcher

public final class Matcher
extends Object
implements MatchResult

  Matcher通过Pattren匹配给定的输入(目标字符串)创建的匹配器,通过匹配器的相关方法得到我们想要的结果。

  • 常用方法
修饰符返回值类型方法名参数列表描述
booleanmatches尝试将整个区域与模式进行匹配。
booleanlookingAt尝试将输入序列从区域开头开始与模式相匹配。
booleanfind尝试找到匹配模式的输入序列的下一个子序列
Stringgroup返回与上一个匹配匹配的输入子序列。
Stringgroupint group返回在上一次匹配操作期间由给定组捕获的输入子序列。
StringgroupString name返回给定捕获的输入子序列 named-capturing group以前的匹配操作期间。
intgroupCount返回此匹配器模式中捕获组的数量。
StringreplaceAllString replacement将与模式匹配的输入序列的每个子序列替换为给定的替换字符串
StringreplaceFirstString replacement将与模式匹配的输入序列的第一个子序列替换为给定的替换字符串。
  • 使用步骤(详细)
    • 执行上匹配操作的引擎character sequence通过解释Pattern 。
    • 通过调用模式的matcher方法从模式创建匹配器。
    • 创建后,可以使用匹配器执行三种不同类型的匹配操作:
        1. 查找
        • matches:从开头匹配所有
        • lookingAt:从开头尝试匹配(并不一定匹配所有)
        • find:匹配所有(不要求从开始就匹配)
        1. 获取
        • group(空参):默认匹配下一个
        • group(参数)
          • 分组序号:0
            • 0 :所有分组
            • 1:第一个分组
          • 分组名称(自定义分组名)
        1. 替换
        • replaceAll:用给定的字符序列替换所有匹配到的字符序列,返回替换后的字符序列
        • replaceFirst:用给定的字符序列替换第一个匹配到的字符序列,返回替换后的字符序列

2、案例

2.1、匹配IP地址、子网掩码、默认网关并输出

  cmd命令窗口获取IP相关信息:window-ipconfig Linux-ifconfig,以windows为例,内容如下:

	连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::a83e:1aaa:fb33:4b19%7
   IPv4 地址 . . . . . . . . . . . . : 192.168.43.181
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.43.37
  • 示例代码2.1-1:

      package regex;
    
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
    
      public class TestIP {
      	public static void main(String[] args) {
      		String ipTxt = "连接特定的 DNS 后缀 . . . . . . . :\r\n" + 
      				"本地链接 IPv6 地址. . . . . . . . : fe80::a83e:1aaa:fb33:4b19%7\r\n" + 
      				"IPv4 地址 . . . . . . . . . . . . : 192.168.43.181\r\n" + 
      				"子网掩码  . . . . . . . . . . . . : 255.255.255.0\r\n" + 
      				"默认网关. . . . . . . . . . . . . : 192.168.43.37";
      		String regex = "\\d+\\.\\d+\\.\\d+\\.\\d+";
      		Matcher matcher = Pattern.compile(regex, Pattern.MULTILINE).matcher(ipTxt);
    
      		while(matcher.find()) {
      			String ip = matcher.group();
      			System.out.println(ip);
      		}
      	}
      }
      测试结果:
      192.168.43.181
      255.255.255.0
      192.168.43.37
    

2.2、把匹配到的字符串替换为另外一个字符串

  • 示例2.2-1:把“吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮”中的葡萄替换为“核桃”

  • 解法1:利用String类的replace方法

  • 解法2:利用Matcher的replaceAll方法

      package regex;
    
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
    
      public class TestRegexReplace {
      	public static void main(String[] args) {
      		String str = "吃葡萄不吐葡萄皮 不吃葡萄倒吐葡萄皮";
    
      		String target = str.replace("葡萄", "核桃");
      		System.out.println(target);
    
      		Matcher matcher = Pattern.compile("葡萄").matcher(str);
      		String target1 = matcher.replaceAll("核桃");
      		System.out.println(target1);
      	}
      }
      测试结果:
      吃核桃不吐核桃皮 不吃核桃倒吐核桃皮
      吃核桃不吐核桃皮 不吃核桃倒吐核桃皮
    

后记

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

前端项目源代码地址:https://gitee.com/gaogzhen/vue-leyou
    后端JAVA源代码地址:https://gitee.com/gaogzhen/JAVA

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值