Java使用正则表达式(2)

140 阅读3分钟

本文已参加 [新人创作礼] 活动,一起开启掘金创作之旅

Matcher类使用

1. 使用pattern对象创建出Matcher实例
    string msg = "{0}"
    Pattern pattern = Pattern.compile("\\{\\d}");
    Matcher matcher = pattern.matcher(msg);
2. 对整个字符串展开正则匹配,只有整个字符串完全匹配后才返回真
    // boolean matchers();
    Boolean b = matcher.matchers(); // true
3. 对目标字符串从左边开始正则匹配,只有匹配的字符串在最左边才返回真
    // boolean lookingAt();
    Boolean b = matcher.lookingAt(); // true
4. 对目标字符串查找与正则匹配的下一个子序列,匹配到的子序列可以在目标串的任意位置
    // boolean find();
    String msg = "占位符一 {0} ,占位符二 {1}";
    Pattern pattern = pattern.compile("\\{\\d}");
    Matcher matcher = pattern.matcher(msg);
    while(matcher.find){
        String parameter = matcher.group();
        String rep = msg.replace(parameter,"替换");
        System.out.println(rep);
    }
5. 返回匹配到的字符序列第一个字符在目标字符串中的位置
    int start();
    int start = matcher.start();
6. 返回匹配到的字符序列最后一个字符在目标字符串中的位置
    int end();
    int end = matcher.end();
7. 返回匹配到子序列
    String group();
    String group = matcher.group();

补充

Pattern

1. 分割字符串
    String split(CharSequence input)
    String regex = "\\-|\\=";
    String msg = "分割一-分割二=分割三=分割四";
    String[] splitStrArr = pattern.split(msg); // 分割一  分割二  分割三 分割四
    // 带有limit参数,指定要分割的段数
    String split(CharSequence input,int limit);
    String[] splitStrArr = pattern.split(msg,2); // 分割一  分割二=分割三=分割四
    

常用的正则表达式

  1. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    
  2. 匹配空行的正则表达式:\n[\s| ]*\r
    
  3. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
    
  4. 匹配首尾空格的正则表达式:(^\s*)|(\s*$)
    
  5. 匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
    
  6. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    
  7. 匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
    
  8. sql语句:^(select|drop|delete|create|update|insert).*$
    
  9. 非负整数:^\d+$
    
  10. 正整数:^[0-9]*[1-9][0-9]*$
    
  11. 非正整数:^((-\d+)|(0+))$
    
  12. 负整数:^-[0-9]*[1-9][0-9]*$
    
  13. 整数:^-?\d+$
    
  14. 非负浮点数:^\d+(\.\d+)?$
    
  15. 正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
    
  16. 非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
    
  17. 负浮点数:^(-((正浮点数正则式)))$
    
  18. 英文字符串:^[A-Za-z]+$
    
  19. 英文大写串:^[A-Z]+$
    
  20. 英文小写串:^[a-z]+$
    
  21. 英文字符数字串:^[A-Za-z0-9]+$
    
  22. 英数字加下划线串:^\w+$
    
  23. E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
    
  24. URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
    
  25. 邮政编码:^[1-9]\d{5}$
    
  26. 电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
    
  27. 手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
    
  28. 双字节字符(包括汉字在内):^\x00-\xff
    
  29. 匹配首尾空格:(^\s*)|(\s*$)
    
  30. 提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
    
  31. 提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    
  32. 提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
    
  33. 提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
    
  34. 提取信息中的中国手机号码:(86)*0*13\d{9}
    
  35. 提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
    
  36. 提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
    
  37. 提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
    
  38. 提取信息中的浮点数(即小数):(-?\d*)\.?\d+
    
  39. 提取信息中的任何数字 :(-?\d*)(\.\d+)?
    
  40. 电话区号:/^0\d{2,3}$/
    
  41. 腾讯QQ号:^[1-9]*[1-9][0-9]*$
    
  42. 帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    
  43. 中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$