[SXT][MSB]正则表达式总结

2024-01-25 19:48
文章标签 总结 正则表达式 msb sxt

本文主要是介绍[SXT][MSB]正则表达式总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

http://www.cjsdn.net/Doc/JDK50/java/util/regex/Pattern.html

 

package test.regularExp;

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

public class Test {

 public static void main(String[] args) {
  
  // ==== 简单认识正则表达式的概念 ====
  /*p("abc".matches("..."));
  p("a13123b".replaceAll("
\\d", "-"));  // \d表示 一个数字
  Pattern p = Pattern.compile("[a-z]{3}");
  Matcher m = p.matcher("fgh");
  p(m.matches());
  p("fghj".matches("[a-z]{3}"));*/
  
  // ==== 初步认识 . * + ? ====
  /*
   * Greedy 数量词
   X?   X,一次或一次也没有
   X*   X,零次或多次
   X+   X,一次或多次
   X{n}   X,恰好 n 次
   X{n,}   X,至少 n 次
   X{n,m}   X,至少 n 次,但是不超过 m 次
   */
  /*p("a".matches(".")); // .表示 任意一个字符
  p("aa".matches("aa"));
  p("aaaa".matches("a*")); // *表示 0个多个或
  p("aaaa".matches("a+")); // +表示 1个或多个
  p("aaaa".matches("a?")); // ?表示 0个或1个
  p("".matches("a?"));
  p("236152352345".matches("
\\d{3,100}")); // {3,100}表示 长度是3到100
  p("192.168.0.aaa".matches("
\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\{1,3}"));
  p("192".matches("[0-2][0-9][0-9]"));*/
  
  // ==== 范围 ====
  /*
   * 字符类
   [abc] a、b 或 c(简单类)
   [^abc] 任何字符,除了 a、b 或 c(否定)
   [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
   [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
   [a-z&&[def]] d、e 或 f(交集)
   [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
   [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
   */
  /*p("a".matches("[abc]"));
  p("a".matches("[^abc]")); // ^表示 除了abc之外的字符
  p("a".matches("[a-zA-Z]"));
  p("a".matches("[a-z]|[A-Z]")); // a-z OR A-Z
  p("a".matches("[a-z[A-Z]]")); // a-z OR A-Z
  p("a".matches("[A-Z&&[RFG]]")); // A-Z AND RFG中的三者之一*/
  
  // ==== 认识 \s \w \d \ ====
  /*
   *  预定义字符类
   . 任何字符(与行结束符可能匹配也可能不匹配)
   \d 数字:[0-9]
   \D 非数字: [^0-9]
   \s 空白字符:[ \t\n\x0B\f\r]
   \S 非空白字符:[^\s]
   \w 单词字符:[a-zA-Z_0-9]
   \W 非单词字符:[^\w]
   */
  /*p(" \n\r\t".matches("
\\s{4}"));
  p(" ".matches("
\\S"));
  p("a_8".matches("
\\w{3}"));
  p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
  p("
\\".matches("\\\\"));*/
  
  // ==== POSIX Style ====
  /*
   * POSIX 字符类(仅 US-ASCII)
   \p{Lower} 小写字母字符:[a-z]
   \p{Upper} 大写字母字符:[A-Z]
   \p{ASCII} 所有 ASCII:[\x00-\x7F]
   \p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
   \p{Digit} 十进制数字:[0-9]
   \p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
   \p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
   \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
   \p{Print} 可打印字符:[\p{Graph}\x20]
   \p{Blank} 空格或制表符:[ \t]
   \p{Cntrl} 控制字符:[\x00-\x1F\x7F]
   \p{XDigit} 十六进制数字:[0-9a-fA-F]
   \p{Space} 空白字符:[ \t\n\x0B\f\r]
   */
  //p("a".matches("
\\p{Lower}"));
  
  // ==== boundary ====
  /*
   * 边界匹配器
   ^ 行的开头
   $ 行的结尾
   \b 单词边界
   \B 非单词边界
   \A 输入的开头
   \G 上一个匹配的结尾
   \Z 输入的结尾,仅用于最后的结束符(如果有的话)
   \z 输入的结尾
   */
  /*p("hello sir".matches("^h.*"));
  p("hello sir".matches(".*r$"));
  p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));
  p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));*/
  
  // ==== white lines ====
  //p("  \n".matches("^[\\s&&[^\\n]]*\\n$"));
  
  // ==== practise ====
  /*p("aaa 8888c".matches(".*\\d{4}."));
  p("aaa 8888c".matches(".*\\b\\d{4}."));
  p("aaa8888c".matches(".*\\d{4}."));
  p("aaa8888c".matches(".*\\b\\d{4}."));*/
  
  // ==== email ====
  //p("
adsfasdfasdf@afdads.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
  
  // ==== matches find lookingAt  start&end ====
  /*Pattern p = Pattern.compile("
\\d{3,5}");
  String s = "123-34343-234-00";
  Matcher m = p.matcher(s);
  p(m.matches());
  m.reset();
  
  p(m.find());
  p(m.start() + "-" + m.end());
  p(m.find());
  p(m.start() + "-" + m.end());
  p(m.find());
  p(m.start() + "-" + m.end());
  p(m.find());
  p(m.start() + "-" + m.end());
  
  p(m.lookingAt());
  p(m.lookingAt());
  p(m.lookingAt());
  p(m.lookingAt());*/
  
  // ==== string replacement ====
  /*Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher("java JAVa JAVA jaVa IlovejAVA youhateJaVa");
  //p(m.replaceAll("JAVA"));
  StringBuffer buf = new StringBuffer();
  int i=0;
  while(m.find()) {
   i++;
   if (i%2 == 0) {
    m.appendReplacement(buf, "java");
   } else {
    m.appendReplacement(buf, "JAVA");
   }
  }
  m.appendTail(buf);
  p(buf);  */
  
  // ==== group ====
  /*Pattern p = Pattern.compile("(
\\d{3,5})([a-z]{2})");
  String s = "123aa-34345bb-234cc-00";
  Matcher m = p.matcher(s);
  while(m.find()) {
   //p(m.find());
   p(m.group());
   //p(m.group(1));
   //p(m.group(2));
  }*/
  
  // ==== qulifiers ====
  /*
   * Greedy 数量词
   X? X,一次或一次也没有
   X* X,零次或多次
   X+ X,一次或多次
   X{n} X,恰好 n 次
   X{n,} X,至少 n 次
   X{n,m} X,至少 n 次,但是不超过 m 次
 
   Reluctant 数量词
   x?? X,一次或一次也没有
   X*? X,零次或多次
   X+? X,一次或多次
   X{n}? X,恰好 n 次
   X{n,}? X,至少 n 次
   X{n,m}? X,至少 n 次,但是不超过 m 次
 
   Possessive 数量词
   X?+ X,一次或一次也没有
   X*+ X,零次或多次
   X++ X,一次或多次
   X{n}+ X,恰好 n 次
   X{n,}+ X,至少 n 次
   X{n,m}+ X,至少 n 次,但是不超过 m 次
   */
  /*Pattern p = Pattern.compile(".{3,10}[0-9]");
  //Pattern p = Pattern.compile(".{3,10}?[0-9]");
  //Pattern p = Pattern.compile(".{3,10}+[0-9]");
  String s = "aaaa5bbbb6";
  Matcher m = p.matcher(s);
  if (m.find()) {
   p(m.start() + "-" + m.end());
  } else {
   p("not match!");
  }*/
  
  // ==== non-capturing groups ====
  Pattern p = Pattern.compile(".{3}(?=a)");
  //Pattern p = Pattern.compile(".{3}(?!a)");
  //Pattern p = Pattern.compile("(?=a).{3}");
  //Pattern p = Pattern.compile(".{3}(?<=a)");
  String s = "444a66b";
  Matcher m = p.matcher(s);
  while (m.find()) {
   p(m.group());
  }
 }
 
 public static void p(Object o) {
  System.out.println(o);
 }
}

 // ===== 抓取网页中的email地址 =====

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailSpider {

 public static void main(String[] args) {
  try {
   BufferedReader br = new BufferedReader(new FileReader("d:\\1.txt"));
   String line = "";
   while((line=br.readLine()) != null) {
    parse(line);
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 private static void parse(String line) {
  Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
  Matcher m = p.matcher(line);
  while(m.find()) {
   System.out.println(m.group());
  }
 }

}

 

// ==== 代码统计程序 ====

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CodeCounter {
 
 static long normalLines = 0;
 static long commentLines = 0;
 static long whiteLines = 0;

 public static void main(String[] args) {
  File f = new File("D:\\code\\src\\");
  File[] codeFiles = f.listFiles();
  for (File child : codeFiles) {
   if (child.getName().matches(".*\\.java$")) {
    parse(child);
   }
  }
 }

 private static void parse(File f) {
  BufferedReader br = null;
  try {
   br = new BufferedReader(new FileReader(f));
   String line = "";
   while((line = br.readLine()) != null) {
    if ((line.matches("^[\\s&&[^\\n]]*\\n$"))) {
     whiteLines++;
    } else {
     
    }
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (br != null) {
    try {
     br.close();
     br = null;
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }

}

这篇关于[SXT][MSB]正则表达式总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/644404

相关文章

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

正则表达式r前缀使用指南及如何避免常见错误

《正则表达式r前缀使用指南及如何避免常见错误》正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性,本文将简洁地讲解r的作用、基本原理,以及如何在实际代码中避免常见错误,感兴趣的朋友一... 目录1. 字符串的双重翻译困境2. 为什么需要 r?3. 常见错误和正确用法4. Unicode 转换的

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi