Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 695|回复: 0

正则表达式与模式匹配

[复制链接]

该用户从未签到

发表于 2011-9-13 21:33:49 | 显示全部楼层 |阅读模式
概念:
1,  模式匹配:就是检索与指定模式匹配的字符串。java提供了专门进行模式匹配的类,在java.util.regex。
1)  建立模式对象:
使用Pattern类创建一个对象,称为模式对象。它调用类方法compile(String pattern)完成这一任务,参数pattern是一个正则表达式,称为模式对象使用的模式。若pattern指定的正则表达式有错,compile方法将抛出异常,PatternSyntaxException。
Pattern类可以调用类方法compile(String regex,int flag)返回一个pattern对象,
2)  建立匹配对象
模式对象调用方法matcher(CharSequence input);返回一个Matcher对象m,称为匹配对象,参数input可以是任何实现了CharSequence接口的类创建的对象。String和StringBuffer类都使用了CharSequence接口。
Matcher 对象可以使用3个方法寻找参数Input指定的字符序列中是否有与模式pattern匹配的子序列。
a)       public boolean find();寻找input中第一个与模式pattern匹配的子序列,若find()返回true,m调用start()和end()可以得到该匹配模式子序列在input中的开始位置和结束位置。
b)      public boolean matches();判断input是否完全与pattern匹配
c)      public Boolean lookingAt();判断从input开始位置是否有与pattern匹配的子序列。若返回True, m调用start()和end()可以得到lookingAt()方法找到的匹配模式子序列在input中的开始位置和结束位置。
d)      public Boolean find(int start);
e)       public string replaceAll(String replacement);
f)       public String replaceFirst(String replacement);




import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestPattern {
   public static void main(String[] args) {
      Pattern p ;
      Matcher m ;
      String s1 = "0A1A2A3A4A5A6A7A8A9";
      p = Pattern.compile("\\dA\\d");
      m = p.matcher(s1);
      System.out.println("matches1:"+m.matches());
      while (m.find()) {
        String str = m.group();
        System.out.println(""+m.start()+""+m.end()+"匹配模式子序列:");
        System.out.println(str);
      }
      String temp = m.replaceAll("***");
      System.out.println(temp);
      System.out.println(s1);
      m = p.matcher("9A0A0A3");
      if (m.matches()) {
        String str = m.group();
        System.out.println(str);
        System.out.println("matches:"+m.matches());
        System.out.println("find:"+m.find());
      }else {
        System.out.println("不完全匹配!");
      }
      if (m.lookingAt()) {
        String str = m.group();
        System.out.println(str);
      }
   }
}

元字符模式:
       在正则表达式中可以使用一对方括号扩起来的若干个字符,代表方括号中的任何一个字符。例如pattern=” [123]abc”,那么“1acb”、“2abc”、“3abc”都是与pattern 匹配的字符序列。
       [abc] 代表abc中任何一个。
       [^abc] 代表处理abc以外的任何字符。
       [a-d] 代表a到d 的任何一个。
       中括号里可以嵌套中括号,可以进行并,交,差运算。
       [a-d[m-p]]代表a到d,或者M-p中任何字符(并)。
       [a-z&&[def]]代表d,e,f中任何一个(交)。
       [a-f&&[^bc]]代表a,d,e,f(差)。
元字符
正则表达式中的写法
意义
.
“.”
代表任何一个字符
\d
“\\d”
0-9任何一个数字
\D
“\\D”
任何一个非数字字符
\s
“\s”
空格类字符:‘\t’’\n’ ‘\x0B’ ,’\f’,’\r’
\S
“\S”
非空格类字符
\w
“\w”
可用以标识符的字符(不含$)
\W
“\W”
不能用于标识符的字符

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class YuanZiFuPattern {
       public static void main(String[] args) {
              Pattern p;
              Matcher m;
              String s1 = "23&12$A69Q90W";
              p = Pattern.compile("[24680][13579]\\w");
              m = p.matcher(s1);
              while (m.find()) {
                     String str = m.group();
                     System.out.println("1:从"+m.start()+"到"+m.end()+"匹配模式子序列");
                     System.out.println(str);
              }
              String s2 = "as27Aiu86Adfs";
              p = Pattern.compile("[1-9&&[^46]A][^234]");
              m = p.matcher(s2);
              while (m.find()) {
                     String str = m.group();
                     System.out.println("2:从"+m.start()+"到"+m.end()+"匹配模式子序列");
                     System.out.println(str);
              }
       }
}

模式的逻辑或
       模式可以使用位运算符“|”进行逻辑或运算,得到一个新模式。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MoShiHuo {
       public static void main(String[] args) {
              Pattern p;
              Matcher m;
              String s1 = "loveyouhatemelove123jkjhate999love888";
              p = Pattern.compile("love\\w{3}|hate\\w{2}");
              m = p.matcher(s1);
              while (m.find()) {
                     String str = m.group();
                     System.out.println("从"+m.start()+"到"+m.end()+"匹配模式子序列:");
                     System.out.println(str);
              }
       }

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-7 01:14 , Processed in 0.410878 second(s), 48 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表