java:字符串与正则表达式

系列文章目录

文章目录

  • 系列文章目录
  • 正则表达式
    • 字符类
    • 逻辑运算符
    • 边界匹配符
    • 量词
    • 捕获组
    • Pattern
        • 具体方法
    • Matcher
        • 具体方法
        • 捕获组操作和非捕获组组操作

正则表达式

正则就是有规律的意思,正则表达式就是一组有规则的字符串。

字符类

正则表达式 说明
x 某个字符x
. 任意一个字符
\d 任意一数字
\D 任意一非数字
\w 任意一单词字符类型
\W 任意一非单词字符类型
\s 任意一个空白字符
\S 任意一个非空白字符
[abc] a或b或c
[ ^abc ] 除 a或b或c 之外
[a-z] a到z
\\ 反斜杠
\xhh 十六进制字符hh
\t 制表位
\n 换行
\r 换行

逻辑运算符

正则表达式 说明
xy x后跟y
x y

边界匹配符

正则表达式 说明
^ xxx 在开头匹配正则xxx
xxx$ 在结尾匹配正则
\b 单词边界

量词

正则表达式 说明
x? x出现一次或零次
x* x出现零次或多次
x+ x出现一次或多次
x{n} x出现n次
x{n,} x出现至少n次
x{n,m} x出现至少n次至多m次

捕获组

正则表达式 说明
((A)(B( C))) 自左到右以左括号编号捕获组

Pattern

在java中我们必须将正则表达式编译为此类的实例。 然后将所得的实例创建一个Matcher对象进行匹配

具体方法

  • static Pattern compile(String regex)
  • static Pattern compile(String regex, int flags)
  • Matcher matcher(CharSequence input)

Matcher

具体方法

查找方法

  • boolean find()
  • boolean find(int startIndex)
    重置匹配器并从指定开始索引进行查找

索引方法

  • int start()
  • int start(int group)
  • int end()
  • int end(int group)

查看结果

  • String group()
  • String group(int group)

捕获组操作和非捕获组组操作

非捕获组操作

package com.chinesecooly;

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

public class App {
     

    public static void main(String[] args) {
     
        String line = "小明18";
        String pattern1 = "\\W{2,}";
        String pattern2 = "\\d{1,3}";
        Pattern pt = Pattern.compile(pattern1);
        Pattern pt2 = Pattern.compile(pattern2);
        Matcher mt = pt.matcher(line);
        Matcher mt2 = pt2.matcher(line);
        mt.find();
        mt2.find();
        System.out.println(mt.group() + mt.start() + mt.end());
        System.out.println(mt2.group() + mt2.start() + mt2.end());
    }
}

输出结果
在这里插入图片描述
捕获组操作

package com.chinesecooly;

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

public class App {
     

    public static void main(String[] args) {
     
        String line = "小明18";
        String pattern1 = "(\\W{2,})(\\d{1,3})";
        Pattern pt = Pattern.compile(pattern1);
        Matcher mt = pt.matcher(line);
        mt.find();
        System.out.println(mt.group(1) + mt.start(1) + mt.end(1));
        System.out.println(mt.group(2) + mt.start(2) + mt.end(2));

    }
}

输出结果
在这里插入图片描述
注意当使用捕获组时如果第一个捕获组没有匹配到那么接下来的捕获组也将不会执行,如果可以继续执行下去,那么剩下的捕获组会在剩下的字符串内进行捕获。

你可能感兴趣的:(java,字符串,算法,正则表达式,java,python)