黑马程序员-java专题系列之1-正则表达式
来源:互联网 发布:手机数控编程软件 编辑:程序博客网 时间:2024/05/02 04:26
------- android培训、java培训、期待与您交流! ----------
java正则表达式使用正则表达式可以方便的对数据进行匹配,还可以实现更加复杂的字符串验证,例如拆分,替换,获取,验证这些功能,假如,现在要求判断一个数字是否是全部由数字组成,可以有下面
两种做法
例1(不使用正则表达式)
import java.util.regex.*;public class TestRegex {public static void main(String[] args) {String str = "2hjghgh";boolean flag = true;char[] c = str.toCharArray();for(char mychar: c) {if(mychar < '0' || mychar > '9') {flag = false;break;}}if(flag) {System.out.println("全部由数字组成");} else {System.out.println("不是全部由数字组成");}}}
例2(使用正则表达式)
/* * 使用正则表达式判断是否匹配数据 */import java.util.regex.*;public class TestRegex2 {public static void main(String[] args) {String regex = "\\d+";//指定匹配的规则String testNum = "sadfsdf7687";Pattern p = Pattern.compile(regex);//将给定的正则表达式编译到模式中Matcher m = p.matcher(testNum);//得到匹配器System.out.println(m.matches());//尝试将整个区域与模式匹配。System.out.println(p);}}
例二与例一的功能相同,但是例二的代码要比例一短好多,例二就是使用正则表达式进行验证的,具体的正则表达式是使用 Pattern 和 Matcher 这两个类完成操作的,正则表达式是1.5
增加的新内容
Pattern 类和 Matcher 类
这两个类在java.util.regex包中定义的, Pattern 主要进行正则规范的编写, Matcher 主要是执行规范,验证字符串是否符合规范
Pattern 类中常用的正则规范
字符类
[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](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为捕获组
例3(验证一个字符串是否是合法的日期时间格式)
import java.util.regex.*;public class TestDateRegex {public static void main(String[] args) {String date = "1993-12-05 12:12:12";String regex = "\\d{4}-[0-1]\\d-[0-3]\\d\\s[0-2][0-9]:[0-5][0-9]:[0-5][0-9]";//指定匹配的规则Pattern p = Pattern.compile(regex);//将给定的正则表达式编译到模式中Matcher m = p.matcher(date);if(m.matches()) {System.out.println("日期格式合法");} else {System.out.println("日期格式不合法");}}}
例4
/* * * 用正则表达式测试邮箱地址是否合法 * 并将邮箱地址中的小写字母全部替换成大写字母 * */import java.util.regex.*;public class TestEmailAddress {public static void main(String[] args) {String regex = "[\\d\\w]+@\\w+(\\.\\w+)+";String test = "11asdasda@qq.com.cn";System.out.println(TestEmailAddress.testEA(test, regex));//显示是否为正确的地址格式System.out.println(TestEmailAddress.replaceUpperChar(test));//打印替换后的字符串}public static boolean testEA(String ea, String regex) {//该方法用来测试邮箱地址是否合法Pattern p = Pattern.compile(regex);Matcher m = p.matcher(ea);return (m.matches());//返回是否匹配}public static String replaceUpperChar(String ea) {//将指定邮箱地址中的小写字母全部变为大写String regex = "[a-z]+";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(ea);StringBuilder sb = new StringBuilder(ea);//用StringBuilder比String效率高//String str = ea;while(m.find()) {sb = sb.replace(m.start(), m.end(), m.group().toUpperCase());//找到一次替换一次/*System.out.println(str = str.replace(m.group(), m.group().toUpperCase()));System.out.println(m.start());System.out.println(m.end());*///System.out.println(sb);}String s = new String(sb);return s;//返回替换后的字符串}}
String 对正则表达式的支持
在 String 类中有三个主要方法支持正则表达式操作
1.public boolean matches(String regex) //字符串匹配
2.public String replaceAll(String regex, String replacement)//替换符合匹配的全部字符串
3.public String replaceFirst(String regex, String replacement)//替换符合匹配的第一个字符串
4.public String[] split(String regex) //根据正则表达式拆分字符串
5.public String[] split(String regex, int limit) //根据匹配给定的正则表达式来拆分此字符串。
例5
/* * 叠词的去除,利用String中的方法替换拆分字符串 * */public class TestStringTegex {public static void main(String[] args) {String str1 = "您您您您您您您您您您您您.......好好好好好好好好好好好好好好好........吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗吗......!!!!!!!!!!!!!";System.out.println("字符串验证操作" + str1.matches("^(.)\\1+"));String str2 = str1.replaceAll("(.)\\1+", "$1");//替换叠词System.out.println(str2);String[] str3 = str2.split("\\.");//利用。切割字符串for(String str: str3) {System.out.println("切割后的子字符串:" + str);//循环打印切割后的子字符串}}}
- 黑马程序员-java专题系列之1-正则表达式
- 黑马程序员---java基础之正则表达式
- 黑马程序员----JAVA基础之正则表达式
- 黑马程序员--java 之 正则表达式
- <<黑马程序员>>java基础之正则表达式
- 黑马程序员之Java--正则表达式
- 黑马程序员-java基础之正则表达式
- 黑马程序员 Java基础之正则表达式
- 黑马程序员 java基础之正则表达式
- 黑马程序员--java基础之正则表达式
- 黑马程序员--java学习之正则表达式
- 黑马程序员-JAVA基础之正则表达式
- 黑马程序员java之正则表达式
- 黑马程序员-java专题系列之2-字符编码
- 黑马程序员-java专题系列之3-日期
- 黑马程序员-java专题系列之4-高新技术
- 黑马程序员之正则表达式
- 黑马程序员之正则表达式
- VMware workstation 9.0 安装Debian 6.0.7(647M)及vmware tools教程
- 分频
- SSH原理和使用
- 捕获/ 比较通道
- 2.1Head First Servlet & Jsp——请求转发和请求重定向
- 黑马程序员-java专题系列之1-正则表达式
- NetBeans菜单栏字体设置
- 工作日记
- 2.2Head First Servlet & Jsp——EL表达式原理
- 改变进度条jProgressBar的颜色
- Linux下时间机制
- system()和execve()区别
- 论坛群发,论坛顶贴验证码识别解决方案
- 穆利堂推荐-新公司应该怎么雇佣人才?