码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2020-05-23 23:00:56      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:nta   private   模式匹配   code   位置   正则表达   是什么   字符串   syn   

正则表达式是什么?有什么用?

正则表达式(Regular Expression)是一种文本规则,可以用来校验查找替换与规则匹配的文本。

正则表达式是一个强大的文本匹配工具,但是它的规则实在很繁琐,而且理解起来也颇为蛋疼,容易让人望而生畏。

学习正则应该从实例去理解规则。

一、正则表达式介绍

JDK中的java.util.regex包提供了对正则表达式的支持。

java.util.regex有三个核心类:

  • Pattern类:Pattern是一个正则表达式的编译表示。
  • Matcher类:Matcher是对输入字符串进行解释和匹配操作的引擎。
  • PatternSyntaxException:PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

注:需要格外注意一点,在Java中使用反斜杠"\"时必须写成 "\\"。所以本文的代码出现形如String regex = "\\$\\{.*?\\}" 其实就是"$\{.*?\}",不要以为是画风不对哦。

1. Pattern类

Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其静态方法compile,加载正则规则字符串,然后返回一个Pattern对象。

Pattern类一样,Matcher类也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。

示例

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
2. Matcher类

Matcher类可以说是java.util.regex核心类中的必杀技!

Matcher类有三板斧(三类功能):

  • 校验
  • 查找
  • 替换
校验文本是否与正则规则匹配

为了检查文本是否与正则规则匹配,Matcher提供了以下几个返回值为boolean的方法。

序号方法及说明
1 **public boolean lookingAt() ** 尝试将从区域开头开始的输入序列与该模式匹配。
2 **public boolean find() **尝试查找与该模式匹配的输入序列的下一个子序列。
3 public boolean find(int start)重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
4 **public boolean matches() **尝试将整个区域与模式匹配。

 如果你傻傻分不清上面的查找方法有什么区别,那么下面一个例子就可以让你秒懂。

public static void main(String[] args) {
    checkLookingAt("hello", "helloworld");
    checkLookingAt("world", "helloworld");

    checkFind("hello", "helloworld");
    checkFind("world", "helloworld");

    checkMatches("hello", "helloworld");
    checkMatches("world", "helloworld");
    checkMatches("helloworld", "helloworld");
}

private static void checkLookingAt(String regex, String content) {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(content);
    if (m.lookingAt()) {
        System.out.println(content + "\tlookingAt: " + regex);
    } else {
        System.out.println(content + "\tnot lookingAt: " + regex);
    }
}

private static void checkFind(String regex, String content) {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(content);
    if (m.find()) {
        System.out.println(content + "\tfind: " + regex);
    } else {
        System.out.println(content + "\tnot find: " + regex);
    }
}

private static void checkMatches(String regex, String content) {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(content);
    if (m.matches()) {
        System.out.println(content + "\tmatches: " + regex);
    } else {
        System.out.println(content + "\tnot matches: " + regex);
    }
}

输出

helloworld    lookingAt: hello
helloworld    not lookingAt: world
helloworld    find: hello
helloworld    find: world
helloworld    not matches: hello
helloworld    not matches: world
helloworld    matches: helloworld

说明

regex = “world” 表示的正则规则是以world开头的字符串,regex = “hello” 和regex = “helloworld” 也是同理。

  • lookingAt方法从头部开始,检查content字符串是否有子字符串于正则规则匹配。
  • find方法检查content字符串是否有子字符串于正则规则匹配,不管字符串所在位置。
  • matches方法检查content字符串整体是否与正则规则匹配。
查找匹配正则规则的文本位置

为了查找文本匹配正则规则的位置,Matcher提供了以下方法:

序号方法及说明
1 **public int start() **返回以前匹配的初始索引。
2 public int start(int group) 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
3 public int end()返回最后匹配字符之后的偏移量。
4 public int end(int group)返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
5 public String group()返回前一个符合匹配条件的子序列。
6 public String group(int group)返回指定的符合匹配条件的子序列。

 

示例:使用start()、end()、group() 查找所有匹配正则条件的子序列

public static void main(String[] args) {
    final String regex = "world";
    final String content = "helloworld helloworld";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(content);
    System.out.println("content: " + content);

    int i = 0;
    while (m.find()) {
        i++;
        System.out.println("[" + i + "th] found");
        System.out.print("start: " + m.start() + ", ");
        System.out.print("end: " + m.end() + ", ");
        System.out.print("group: " + m.group() + "\n");
    }
}

输出

content: helloworld helloworld
[1th] found
start: 5, end: 10, group: world
[2th] found
start: 16, end: 21, group: world

 

 

 

 

二、正则表达式语法规则

 

 

三、正则表达式实例

 

 

 

 

 

 

 

 

 

 

 

 

参考

https://www.cnblogs.com/jingmoxukong/p/6026474.html

https://www.cnblogs.com/jingmoxukong/p/6030197.html

https://www.cnblogs.com/jingmoxukong/p/6040572.html

正则表达式

标签:nta   private   模式匹配   code   位置   正则表达   是什么   字符串   syn   

原文地址:https://www.cnblogs.com/myitnews/p/12944948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!