JAVA正则
来源:互联网 发布:前端程序员 编辑:程序博客网 时间:2024/06/06 05:39
正则表达式常用构造摘要
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
正则表达式常见功能:匹配、切割、替换、获取
/* 正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用一些特定的符号来表示一些代码的操作,这样就简化书写。 所以学习正则表达工,就是在学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作。 弊端:符号定义越多,正则越长,阅读性越差 具体操作功能: 1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false */ public class RegexDemo { public static void main(String[] args) { checkQQ(); demo(); splitDemo("zhangsan,lishi,wangwu",",");//按照,进行切换 splitDemo("zhangsan lishi wangwu"," +");//按照多个空格进行切割 splitDemo("zhangsan.lishi.wangwu","\\.");//按照多个空格进行切割 splitDemo("c:\\abc\\a.txt","\\\\");//去掉反斜杠 splitDemo("erkktykkqqquio","(.)\\1+" );//按照叠词来完成切割 //可以将规则封装成一个组,用()完成,组出现都有编号,从1开始,想要使用已有的组可以通过 //\n(n就是组的编号)的形式来获取 replaceDemo("s tr in g"," +"," ");//将多个空格替换成一个空格 String str="wer1289980000ty12345654uiod12435676f"; replaceDemo(str,"\\d{5,}","#");//将数字替换成# String str1="erkktyqqquizzzzzo"; replaceDemo(str1,"(.)\\1+","&");//将叠词替换成& replaceDemo(str1,"(.)\\1+","$1");//叠词替换成一个,$1表示拿前一个规则的第一个组 getDemo(); } /* 正则表达式的第四个功能 4.获取:将字符串的符合规则的子串取出 操作步骤: 1.将正则表达式封装成对象 2.让正则表达对象和要操作的字符串相关联 3.关联后,获取正则匹配引擎 4.通过引擎对符合规则的子串进行操作,比如取出 */ public static void getDemo(){ String str="ming jian jiu yao fang jia le ,da jia."; 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和mattcher对象来完成的 //只不过被String的方法封装后,用起来较为简单,但是功能单一 boolean b=m.find();//将规则使用到字符串上,并进行符合规则的子串查找 System.out.println(b); //System.out.println(m.group());//用于获取匹配后的结果 //System.out.println("matchers:"+m.matches()); while(m.find()){ System.out.println(m.group()); System.err.println(m.start()+"..."+m.end()); } } //替换 public static void replaceDemo(String str,String regex,String newStr){ String s=str.replaceAll(regex,newStr); System.out.println(s); } //切割 public static void splitDemo(String str,String regex){ String[] arr=str.split(regex); for(String s:arr){ System.out.println(s); } } //\\d 代表'\d' public static void demo(){ String str="bc9999"; String regex="[bcd][a-z]\\d+";//表示第一个字符只能是bcd中一个,且只有一字符,第二个字符只能是a-z boolean flag=str.matches(regex); System.out.println(flag); checkTel(); } /* 匹配 手机号段只有 13xxx 15xxx 18xxx */ public static void checkTel(){ String tel="13800000000"; String telReg="1[358]\\d{9}"; boolean b=tel.matches(telReg); System.out.println(b); } /* 正则验证QQ号码 */ public static void checkQQ(){ String qq="02121212"; String regex="[1-9]\\d{4,14}"; boolean flag=qq.matches(regex); if(flag){ System.out.println("is ok..."); }else{ System.out.println("is nonono..."); } } /* 对QQ号码进行校验 要求:5-15 0不能开头,只能是数字 这种方式:使用了String类中的方法,进行组合完成了需求 ,但是代码过于复杂 */ public static void checkQQ_1() { String qq = "12345"; int len = qq.length(); if (len >= 5 && len <= 15) { if (!qq.startsWith("0")) { try{ Long l=Long.parseLong(qq); System.out.println("qq:"+qq); }catch(NumberFormatException e){ System.out.println("出现了非法字符"); } /*char[] arr = qq.toCharArray(); boolean flag = false; for (int x = 0; x < arr.length; x++) { if (!(arr[x] >= '0' && arr[x] <= '9')) { flag = true; break; } } if (!flag) { System.err.println("qq:" + qq); } else { System.out.println("qq号码中现了非法字符 "); }*/ }else{ System.out.println("不可以0开始"); } }else{ System.out.println("长度错误"); } } //例如:"abcd123.456",得到"123.45",如果数字没有小数点,要得到两位为0的小数,例如:"abcd123",得到"123.00". public static String getString(String str) { String getNumber; getNumber = str.replaceAll("[a-z|A-Z]", ""); if (getNumber.indexOf(".") == -1) { getNumber = getNumber + ".00"; } else { if (getNumber.indexOf(".") == getNumber.length() - 1) { getNumber = getNumber + "00"; } else if (getNumber.indexOf(".") == getNumber.length() - 2) { getNumber = getNumber + "0"; } else { getNumber = getNumber.substring(0, getNumber.indexOf(".") + 3); } } return getNumber; } }
1 0
- Java 正则表达式正则
- java正则
- java正则
- java正则
- java 正则
- java正则
- java正则
- java正则 .
- java正则
- java正则
- java正则
- java正则
- Java 正则
- java正则
- Java正则
- JAVA正则
- java 正则
- java 正则
- iOS开发各种证书问题
- 安卓SlidingPaneLayout
- Treap模板
- JDK中的URLConnection参数详解
- ChemDraw化学领域综合性比较强的绘图软件
- JAVA正则
- java基础学习之事件监听--坦克
- Android系统图标使用
- 最长不下降子序列
- 概率分布 Probability Distributions
- Https iOS需要做的事
- 你真的需要掌握多种编程语言吗?
- Android开发之线程池使用总结
- 合并果子