• 正则表达式使用总结


          如果想要正则匹配 name=wangna age=20 ,并提取出 wangna,20这两个值,就可以写表达式,把要提取的内容写在()里的子表达式里,使用matcher.group() 进行提取。

    public class ThreadTest {

    public static void main(String[] args) {

    String reg ="name=(.+)\s+age=(.+)";

    Pattern pat = Pattern.compile(reg);

    String msg= "name=wangna age=20";

    if (msg != null && pat != null) {
    //使用写好的pat 匹配 待匹配的字符串
    Matcher matcher = pat.matcher(msg);

    //如果待匹配的字符串中,有可以匹配此pat的 字符串
    if (matcher.find()) {

    //matcher.groupCount() 代表匹配到的子表到式的个数+1,1代表matcher.group(0)匹配到的整个字符串
    for (int i = 0; i <= matcher.groupCount(); i++) {

    //得到第0组 是匹配到的整个表达式,第一组是匹配到的第一个子表达式的内容,依此类推。
    System.out.println("Group :"+matcher.group(i));


    }
    }
    }


    String str = "Hello,World!";
    Pattern pattern = Pattern.compile("W(or)(ld!)");
    Matcher matcher = pattern.matcher(str);
    while(matcher.find()){
    System.out.println("Group 0:"+matcher.group(0));//得到第0组——整个匹配
    System.out.println("Group 1:"+matcher.group(1));//得到第一组匹配——与(or)匹配的
    System.out.println("Group 2:"+matcher.group(2));//得到第二组匹配——与(ld!)匹配的,组也就是子表达式
    System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//总匹配的索引
    System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//第一组匹配的索引
    System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//第二组匹配的索引
    System.out.println(str.substring(matcher.start(0),matcher.end(1)));//从总匹配开始索引到第1组匹配的结束索引之间子串——Wor
    }
    }
    }
    打印输出结果:

    Group :name=wangna age=20
    Group :wangna
    Group :20
    Group 0:World!
    Group 1:or
    Group 2:ld!
    Start 0:6 End 0:12
    Start 1:7 End 1:9
    Start 2:9 End 2:12
    Wor



    正则表达式书写样例:


    <01> wangna: oct 31 09:05:00 msg: name=wangna age=20

    private static String reg ="^<([0-9]+)>\s+([A-Za-z]+):\s+([A-Za-z]+\s+\d{2}\s+\d{2}:\d{2}:\d{2})\s+([A-Za-z]+):(.*)";
    private static Pattern pat = Pattern.compile(reg);

    这个表达式可以把 01 , wangna ,Mar 31 09:05:00 , msgbody, id=3547328872 name=wangna age=20 这几个字符串提取出来。

    可以验证正则表达式的网站:
    http://www.matools.com/map

    对特殊符号转义的时候,在上面的网站上使用一个就可以,但在java里需要两个\。

  • 相关阅读:
    显示磁盘信息
    给VG增加磁盘,给文件目录增加空间
    第8.11节 Python类中记录实例变量属性的特殊变量__dict__
    Python中format_map与format字符串格式化的区别
    生成器函数与函数的区别
    什么是Python生成器?与迭代器的关系是什么?
    第8.10节 使用__class__查看Python中实例对应的类
    Python运算符的优先级是怎样的?
    Python怎么控制将一个整数输出成指定长的十六进制数?
    Python中函数的参数带星号是什么意思?
  • 原文地址:https://www.cnblogs.com/luckyna/p/12049945.html
Copyright © 2020-2023  润新知