------- android培训、java培训、期待与您交流! ----------
正则表达式
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式我们可以对字符串进行复杂的操作。在运用中,关键是获取字符串和正则表达式相匹配的部分,只有获取了这部分,就可以
进行多种操作。
正则表达式 regex符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
常见符号
不同符号代表不同匹配规则
\\ 反斜线字符,表示一个反斜线、
[a]表示一个字符,此字符是a,还可以在中括号中添加数字。
[a-z]表示“a”到“z”之间的所有字符(包括两头)。
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)。
[^abc] 任何字符,除了 a、b 或 c(否定)。
. 任何字符(与行结束符可能匹配也可能不匹配)。
\d 数字:[0-9]。
\w 单词字符:[a-zA-Z_0-9]。
X* 数量词,表示X在字符串中出现零次或多次
X+ 一次或多次
X{n,m} 至少 n 次,但是不超过 m 次
(A)表示一个组,在字符串中确定一个组后,会索引后面的字符串,寻找相同的组,并进行预订操作。
具体操作功能:
1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2,切割:String split();
3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
package itcast.heima; public class RegexDemo { public static void main(String[] args) { demo(); //用"."来拆分字符串,由于在正则表达式中"."代表任何字符, //所以要加上反斜线,又因为是在字符串中,故需加两根 splitDemo("zhang.dfd.wangwu","\\."); //用匹配组的字串来拆分, splitDemo("erkkyafjdlfj","(.)\\1+"); //如果字符串中有连续五个或更多数字,则将其换为"#" replaceAllDemo("dfj7778787df","\\d{5,}","#"); String str1 = "luenf ossjfljfkk jlfss"; //将叠词换为单个字符,(.)表示一个组,\\1+表示存在至少一个第一组, //$1表示第一组字符串 replaceAllDemo(str1,"(.)\\1+","$1"); } //替换 public static void replaceAllDemo(String str,String reg,String newStr){ //用newStr替代匹配reg的字符串 str = str.replaceAll(reg, newStr); System.out.println(str); } //切割 public static void splitDemo(String str,String reg){ //用匹配reg的字符串来拆分字符串,并将拆分后的字符串存入数组 String[] arr = str.split(reg); System.out.println(arr.length); for(String s:arr){ System.out.println(s); } } //匹配 public static void checkTel(){ String tel = "3453805808"; //规则:第一个元素为3,第二个元素为5或4或3,最后八个元素为数字 String telReg = "3[543]\\d{8}"; System.out.println(tel.matches(telReg)); } //匹配 public static void demo(){ String str = "808deerer"; //表示至少有一个元素,此元素可以是大小字母,也可为0-9的数字 String reg = "[a-zA-Z_0-9]+"; boolean b = str.matches(reg); System.out.println(b); } }
正则表达式的第四个功能。
4,获取:将字符串中的符合规则的子串取出。
操作步骤:
(A)将正则表达式封装成对象。
Pattern 正则表达式的编译表示形式,就是一个正则对象。
Pattern p = Pattern.compile(reg) 将正则表达式reg封装成对象p。
(B)让正则对象和要操作的字符串相关联,获取正则匹配引擎。
Mathcer对象代表执行匹配操作的引擎。
Matcher m = p.matcher(str);让正则对象和要作用的字符串相关联。获取匹配器对象。
(C)通过引擎对符合规则的子串进行操作,比如取出。
package itcast.heima; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo2 { public static void main(String[] args) { getDemo(); } public static void getDemo() { String str = "ming tian jiu yao fang jia le ,da jia。"; System.out.println(str); String reg = "\\b[a-z]{4}\\b"; //将规则封装成对象。 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str); System.out.println(m.matches()); //其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。 //只不过被String的方法封装后,用起来较为简单。但是功能却单一。 //matches方法将改变匹配索引。下面的匹配将从ming后面开始 boolean b = m.find(); //将规则作用到字符串上,并进行符合规则的子串查找。 System.out.println(b); System.out.println(m.group());//用于获取匹配后结果。 } }
正则表达式的应用:
网页爬虫
可获取网页中的符合要求的内容,下面练习中用于获取网页中的邮件地址。
/* 网页爬虫(蜘蛛) */ import java.io.*; import java.util.regex.*; import java.net.*; import java.util.*; class RegexTest2 { public static void main(String[] args) throws Exception { getMails_1(); } public static void getMails_1()throws Exception { URL url = new URL("http://192.168.1.254:8080/myweb/mail.html"); URLConnection conn = url.openConnection(); BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; \\指定匹配规则 String mailreg = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(mailreg); while((line=bufIn.readLine())!=null) { Matcher m = p.matcher(line); while(m.find()) { //将满足匹配规则的字符串打印出来 System.out.println(m.group()); } } } /* 获取指定文档中的邮件地址。 使用获取功能。Pattern Matcher */ public static void getMails()throws Exception { BufferedReader bufr = new BufferedReader(new FileReader("mail.txt")); String line = null; String mailreg = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(mailreg); while((line=bufr.readLine())!=null) { Matcher m = p.matcher(line); while(m.find()) { System.out.println(m.group()); } } } }
相关推荐
C# 正则表达式 Regex的用法 编程语法
java 正则表达式 java 正则表达式 java 正则表达式 java 正则表达式 java 正则表达式 java 正则表达式 java 正则表达式
《程序员》老文扫描版,页数不多,初学者上手时可以参考一下
正则表达式regex.lib
C#_Regex_深入正则表达式.doc
正则表达式是一个很强的工具,可以在你的软件中增强查找、替换、匹配等功能。附件中封装了Henry Spencer的regex library源码,有说明和范例,纯C可移值,简单易用。
在学习完该教程后,应该对正则表达式有了初步的了解,并能熟练地运用 java.util.regex 包中的关于正则表达式的类库,为今后学习更高级的正则表达式技术奠定良好的基础。 教程中所有的源代码都在 src 目录下,可以...
python基础_36_RegEx_正则表达式_(教学教程tutorial)
非常棒的正则表达式速成教程,号称30分钟叫...这个教程是配合正则表达式测试工具regextester一起使用的,我已经将regextester打包到里面了,方便大家学习。虽然要五分不少,但是5分确实学会正则表达式还是灰常划算的:)
这是一个简单的正则表达式应用jar包,通过调用其内部方法可实现java的一系列验证,提取和清洗的方法,内附帮助文档,使用非常简单,希望可以为广大编程爱好者编程提供方便,欢迎下载!
本资源文件是我自己总结的,其中包括5个类,这5个类的代码基本概括了java正则表达式替换String的多种情况,比如获取某个文件路径中盘符/后边的部分内容,提取"<title>XXXX</title>"中的文字XXXX,用正则表达式获取指定...
正则表达式调试编辑器, eclipse插件Regex Util,装好后,即可从视图打开Regex Util视图了,比较好用!
java超时取消正则表达式匹配方法,代码超时处理,设置代码执行时间,超棒的工具类 lambda,Callable,ExecutorService,超过执行5秒退出
RegexTest RegexTestTool 正则表达式 测试工具
本文当是java正则表达式实例教程,从入门语法开始,结合源代码实例,详细讲解了java正则表达式用法和相关细节
提取了boost::regex里边的几个正则表达式匹配搜索接口,打包成DLL,以在不依赖于boost的情况下独立编译运行
正则表达式是程序员必备的强大工具,得到了各种Unix实用程序,以及Perl、Java、JavaScript、C#等编程语言的支持。读完本书,你会对正则表达式的常用语法了然于胸。掌握正则表达式是提升编程效率、节约时间的一大法.....
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。...正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen。
[1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在分享一下吧。 当然也是为了赚一些...
易语言RegEx_static.lib支持库中文名为易语言正则表达式支持库,本易语言支持库实现了对正则表达式(Regular Expression)的支持。注意,本支持库中的所有命令均为高级命令,要求使用者具有一定的正则表达式知识基础...