zoukankan      html  css  js  c++  java
  • 正则表达式使用总结

          如果想要正则匹配 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里需要两个\。

  • 相关阅读:
    简单理解Socket
    进程间8种通信方式详解
    底部漂浮DIV
    Table样式
    QQ授权登录
    C#_批量插入数据到Sqlserver中的四种方式
    Asp.Net_单点登录
    html之meta详解
    程序员常用工具
    工厂模式理解
  • 原文地址:https://www.cnblogs.com/luckyna/p/12049945.html
Copyright © 2011-2022 走看看