黑马程序员-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);//循环打印切割后的子字符串}}}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 南京居住证换地方了怎么办 买家退回的商品有问题怎么办 农转农户口手续怎么办 原房东不迁户口我怎么办 户主信息页掉了怎么办 户主变了户口本首页怎么办 大人户口迁走小孩户口怎么办 网银转账处理中怎么办 教育部学籍在线验证报告有错怎么办 验证码连续输入三次错误怎么办 交通运输监察大队截车了怎么办 平安安康续保没成功怎么办 危险品经营许可证到期了怎么办 郑万350渝万怎么办 厂里饭堂的饭好难吃怎么办 学校的食堂饭菜不好不卫生怎么办 亲戚借钱我真没有怎么办 榴莲肉酸了吃了怎么办 亲戚赖在家里住怎么办 食堂饭菜味道差该怎么办 被监视居住公安打电话睡着了怎么办 鱼缺氧浮上水面怎么办 车载低音炮有电流声怎么办 925纯银变黑了怎么办 银子放久了变黑怎么办 高铁票网上售空怎么办 高铁票出票失败怎么办 高铁票名字打错怎么办 高铁票姓名错了怎么办 高铁票弄丢了怎么办 用过的车票丢了怎么办 高铁票被水洗了怎么办 沈阳地铁卡丢了怎么办 火车票没写检票口怎么办 吃鸡听的脚步声距离太近怎么办 检票时车票丢了怎么办 高铁出站没检票怎么办 高铁来不及取票怎么办 被发现假的增值税发票怎么办 高铁票身份证验证失败怎么办 网上订的火车票查不到怎么办