java---正则表达式
来源:互联网 发布:js拼接json字符串 编辑:程序博客网 时间:2024/06/06 01:46
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Mathcer 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。其实在String类中也封装了Matcher对象,在字符串中调用了replaceAll方法的内部也是通过正则表达式来实现的,正则表达式的使用方便了对字符串的操作,但是如果对字符串的操作较为复杂,就有使得正则表达式的可读性较低,不利于其它人员的复用。
常用的正则表达式有:
字符类
[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](并集)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\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 输入的开头
Greedy数词量---->匹配整个字符串
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但不超过m次
类似与字符串的方法正则表达式主要有四种具体功能:匹配、切割、替换和获取
下面的代码是对qq号的筛选,电话号码也是类似的匹配规则。
- //匹配
- /*
- * 1、对qq号进行校验
- * 要求:5~15 0不能开头,只能是数字
- */
- //非正则写法
- public static void checkQQ1(String qqStr){
- int len = qqStr.length();
- if(len>=5 && len<=15){
- if(qqStr.indexOf(0)!='0'){
- Long l = Long.parseLong(qqStr);
- System.out.println("qq为:" + l);
- }
- else
- System.out.println("不可以0开头");
- }
- else
- System.out.println(qqStr + "不合法");
- }
- //正则写法
- public static void checkQQ(String qqStr){
- //定义规则
- String reg = "[1-9]\\d{4,14}";
- if(qqStr.matches(reg))
- System.out.println("qq:" + qqStr);
- else
- System.out.println(qqStr + "不是qq号");
- }
- //匹配电话号码
- /*
- * 1、手机号段只有 13xxx 15xxx 18xxxx
- * 2、座机号:010-65784236,0316-3312617,022-12465647,03123312336
- */
- public static void checkTel(String telStr, String regex){
- if(telStr.matches(regex))
- System.out.println(telStr);
- else
- System.out.println("此号码非电话号");
- }
下面的代码是切割代码的演示
- class RegexDemo
- {
- public static void main(String[] args)
- {
- //demo();
- //System.out.println((char)11);
- // checkTel();
- //splitDemo("zhangsan.lisi.wangwu","\\.");
- //splitDemo("c:\\abc\\a.txt","\\\\");
- //splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照叠词完成切割。为了可以让规则的结果被重用
- <span style="white-space:pre"> </span> //可以将规则封装成一个组。用()完成。组的出现都有编号。
- //从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。
- String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数组替换成#。
- //replaceAllDemo(str,"\\d{5,}","#");
- String str1 = "erkktyqqquizzzzzo";//将叠词替换成$. //将重叠的字符替换成单个字母。zzzz->z
- replaceAllDemo(str1,"(.)\\1+","$1");
- }
- public static void replaceAllDemo(String str,String reg,String newStr)
- {
- str = str.replaceAll(reg,newStr);
- System.out.println(str);
- }
- public static void splitDemo(String str,String reg)
- {
- //String reg = " +";//按照多个空格来进行切割
- String[] arr = str.split(reg);
- System.out.println(arr.length);
- for(String s : arr)
- {
- System.out.println(s);
- }
- }
- }
操作步骤:
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。
- import java.util.regex.*;
- 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的方法封装后,用起来较为简单。但是功能却单一。
- // boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。
- // System.out.println(b);
- // System.out.println(m.group());//用于获取匹配后结果。
- //System.out.println("matches:"+m.matches());
- while(m.find())
- {
- System.out.println(m.group());
- System.out.println(m.start()+"...."+m.end());
- }
- }
- }
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Mybatis Integer类型,值为0被认为是空字符串的解决办法
- C# 多线程
- 程序1.1 重排字符 (rearrange.c)
- PyMongo安装和使用
- IOS開發之——objectForKey與valueForKey在NSDictionary中的差異
- java---正则表达式
- Sublime Text配置文件设置
- 机器学习算法-K最近邻从原理到实现(Python)
- HDU-2082(母函数)
- 诡异的磁盘空间100%报警分析得出df -h与du -sh *的根本性差别
- C++面向对象模型初探
- iOS:hidesBottomBarWhenPushed的正确用法
- 简单工厂模式
- 免安装压缩包版Mysql 初始化和配置教程