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 Video File】是一种专为视频开发设计的文件格式,它被广泛应用于多媒体内容的存储和传输。这种格式可能包含一系列技术规格和编码标准,旨在优化视频质量和压缩效率,同时便于开发人员进行集成和处理。在【描述...
在进行mikrotik SXT网桥点对点安装时,我们首先需要了解网桥设备以及点对点连接的定义。网桥是一种网络设备,主要用于连接两个或多个局域网(LAN)段,允许不同网络段中的设备相互通信。在无线通信领域,点对点...
标题 "sxt.rar_sxt" 暗示我们正在处理一个RAR压缩文件,其中包含一个名为"sxt"的项目。这个文件很可能是一个使用Visual C++(VC++)编写的程序,目的是实现无须额外驱动就能访问和操作摄像头的功能。在Windows环境中...
《SXT--RBAC权限控制系统源码解析》 在信息技术领域,权限控制是系统安全的重要组成部分,它确保了用户只能访问他们被授权的资源。本文将深入探讨SXT--RBAC(Role-Based Access Control,基于角色的访问控制)权限...
很抱歉,但根据您给出的信息,标题"‘SXT_ksxt_’"和描述"‘加热后软件恶霸vi热v贵部 将二姑vUI热 进欧冠ire’"似乎包含了一些难以理解的词汇,它们可能不是标准的IT术语或者描述。标签"‘ksxt’"看起来像是简写或...
【SXT Shell:一个自动化安装脚本的探索】 在IT行业中,自动化是提高效率的关键,尤其是在服务器管理和维护中。SXT Shell(SXTshell)是一个专门为实现自动化部署和配置而设计的脚本工具。它旨在简化系统管理员的...
sxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avisxt\weblogic\weblogic安装.avi sxt\weblogic\weblogic安装.avi
"sxt66329PPT模板.pptx" 是一款商务用途的PPT模板,适用于各类专业场合。 1. **模板选择与定制**: - 商务模板通常采用简洁、专业且色彩协调的设计,以符合商业环境的正式氛围。"sxt66329" 模板可能包含一系列预设...
sxt_api_14.jar,便于下载可以使用
正是在这种背景下,刘经理推荐的“sxt+doswin1.zip”压缩包显得尤为珍贵。这个压缩包中包含了两个软件工具,它们分别是SXTPSGJ_V2.1_XiTongZhiJia和doswin1,两者结合使用,为工程师们提供了一个在DOS环境下进行图像...
标题 "sxt.zip_VBa_摄像头" 暗示了这个压缩包可能包含一个使用VBA(Visual Basic for Applications)编程实现的工具或代码,用于访问和操作摄像头。VBA是一种脚本语言,广泛应用于Microsoft Office套件中,如Excel、...
### Pentair 5800 SXT 软水机相关知识点 #### 一、产品概述 Pentair 5800 SXT软水机是一款高性能的家庭软水设备,适用于去除水中硬度矿物质(如钙、镁等),有效改善水质,减少水垢形成,保护家庭用水设备不受损害...
《手写体文字识别技术深度解析》 在数字化时代的今天,手写体文字识别技术扮演着日益重要的角色,尤其在教育、文档管理、个人笔记数字化等领域。本文将深入探讨一个基于C++实现的手写体文字识别系统,以及相关的新...
本资源"**sxt.rar_c#扇形图**"提供了一段代码,可以帮助开发者自定义绘制扇形统计图。 在C#中,我们可以利用GDI+(Graphics Device Interface Plus)库来实现图形绘制,包括扇形图。GDI+是.NET Framework的一部分,...
标题 "sxt.rar_c# 摄像头实例" 提供了一个关于使用C#编程语言进行摄像头控制的项目实例。这个实例可能是一个基础的、可运行的代码示例,用于展示如何在C#环境中访问和操作摄像头设备。下面将详细讨论C#中摄像头控制...
"sxt.rar_dll_pb9_pb9示例" 提供了一个具体的例子,展示了如何在编程中使用DLL,特别是通过PB9(PowerBuilder 9)进行调用。PowerBuilder是一种强大的面向对象的开发工具,常用于构建数据库应用程序。 首先,我们...
总结来说,M6SXT系列超薄型变换器是一款高性能、灵活配置的热电偶信号转换器,适用于各种工业环境中的温度测量和信号处理,通过其强大的PC编程功能和紧凑的结构设计,能够满足不同应用场合的需求。
本资源包“sxt.rar_数据结构”中包含了关于链表算法的程序实现,通过C++语言进行编写,旨在帮助我们深入理解和实践链表的操作。 链表不同于数组,它不是一块连续的内存空间,而是由一系列节点组成,每个节点包含...
在IT领域,尤其是在计算机视觉和图像处理中,"sxt.rar_bmp_matlab采集图片"这一主题涉及到如何使用MATLAB编程语言从摄像头捕获实时图像并将其保存为BMP格式的图片。MATLAB是一款强大的数学计算软件,同时也提供了...
"SXT.rar_DELPHI 摄像头_avicap32"这个压缩包文件提供了一个使用Delphi编程语言进行摄像头捕捉的解决方案。Delphi是一种强大的对象 Pascal 编程环境,常用于快速开发Windows桌面应用。在这个项目中,开发者可以利用...