正则表达式

2009-09-15 21:31

哎呀。。。好难。。。看了马士兵老师的正则表达式专题视频。理解了部分。。。

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test {

public static void p(Object o) {
   System.out.println(o);
}

public static void main(String[] args) {
   //简单认识正则表达式的概念
  
   /*

p("abc".matches("..."));
   p("a8729a".replaceAll("
//d", "-"));// /d 匹配数字 在java里 / 为“//”
   Pattern p = Pattern.compile("[a-z]{3}");//将给定的正则表达式编译到模式中。
   Matcher m = p.matcher("fgh");//创建 匹配指定输入与此模式     的匹配器。
   p(m.matches());//编译给定正则表达式并尝试将给定输入与其匹配。
  
   p("gfgf".matches("[a-z]{3}"));

*/
  
  
   //初步认识. * + ?
/*
   p("a".matches("."));//1个字符
   p("aa".matches("aa"));//2个a
   p("aaaa".matches("a*"));
   p("aaaa".matches("a+"));//1个或多个a
   p("".matches("a*"));//0个或多个a
   p("aaaa".matches("a?"));//0个或1个a
   p("".matches("a?"));
   p("a".matches("a?"));
   p("214523145234532".matches("
//d{3,100}"));//出现3-100个数字
   p("192.168.0.aaa".matches("
//d{1,3}//.//d{1,3}//.//d{1,3}//.//d{1,3}"));
   p("192".matches("[0-2][0-9][0-9]"));

   */
  
   //范围
   /*
   p("a".matches("[abc]"));//取abc任意一个字符
   p("a".matches("[^abc]"));//取除了abc之外的一个字符
   p("A".matches("[a-zA-Z]"));//a-z或者A-Z
   p("A".matches("[a-z]|[A-Z]"));//同上
   p("A".matches("[a-z[A-Z]]"));//同上
   p("R".matches("[A-Z&&[RFG]]"));//A-Z中的RFG

   */
  
   //认识/s /w /d /
  
   /*p(" /n/r/t".matches("
//s{4}"));//T 匹配4个空字符
   p(" ".matches("
//S"));//F //匹配一个不是空的字符
   p("a_8".matches("
//w{3}"));//T 3个单词字符
   //T a-z的字母出现1-3次,数字出现一次或者多次,&^#%四者之一出现一次或多次
   p("abc888&^%".matches("[a-z]{1,3}//d+[&^#%]+"));
   //正则认为"//"是一个反斜线,会跟后面的字符连在一起,如果是“//” 第一个”就没有对应的了
   p("
//".matches(""));//T
*/  
  
   //POSIX Style
   //p("a".matches("
//p{Lower}"));
  
   //boundary
   // ^ 行的开头               $ 行的结尾
  
/*

p("hello sir".matches("^h.*"));
   p("hello sir".matches(".*ir$"));
   ///b代表单词边界,比如空字符,换行等
   //h开头,ell符合1-3个字符,字符o ,边界符
   p("hello sir".matches("^h[a-z]{1,3}o//b.*"));
   p("hellosir".matches("^h[a-z]{1,3}o//b.*"));
  
   //whilte lines /s空白字符    注意^在【】里表示非的意思,其他表示行的开头
   //开头的是空白字符但不是换行符,出现0次或多次,   换行符结尾
   p(" /n".matches("^[//s&&[^//n]]*//n$"));

  
*/
    
//   p("aaa 8888c".matches(".*//d{4}."));//T
//   p("aaa 8888c".matches(".*//b//d{4}."));//T
//   p("aaa8888c".matches(".*//d{4}."));//T
//   p("aaa8888c".matches(".*//b//d{4}."));//F
  
  
   //email /w表示单词字符:[a-zA-Z_0-9]
   //[//w[.-]]+ 出现1次或多次的[//w[.-]] 它表示单词里出现.或者-(即出现一个字符或者出现-)
   //别忘了 .代表1个字符,最上面写的有。最后的是一个或多个.(字符)
   p("
asdfasdfsafsf@dsdfsdf.com".matches("[//w[.-]]+@[//w[.-]]+//.[//w]+"));
   p("-".matches("."));//T 这样看来 - 也属于.的一种!好像上面的把.和-分别判断没意思了(个人理解)
  
   //matches find lookingAt
  
   Pattern p = Pattern.compile("
//d{3,5}");
   String s = "123-34345-234-00";
            //0123456789abcdef 共16位 从0开始计,最后一个0是15
   Matcher m = p.matcher(s);
   p("结果:/t"+m.matches());
   m.reset();//“指针”移到第一位
   p(m.find());//找符合的子串
   p(m.start() + "-" + m.end());//end 结束位的下一位 0-3
   p(m.find());
   p(m.start() + "-" + m.end());//匹配成功后才有start end 4-9
   p(m.find());
   p(m.start() + "-" + m.end());//10-13
   p(m.find());//F 不存在start 和end
   //p(m.start() + "-" + m.end());
   p(m.lookingAt());// 尝试将从区域开头开始的输入序列与该模式匹配。
   p(m.lookingAt());
   p(m.lookingAt());
   p(m.lookingAt());
  
  
   //replacement
   /*
   Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
   Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
   StringBuffer buf = new StringBuffer();
   int i=0;
   while(m.find()) {
    i++;
    if(i%2 == 0) {
     m.appendReplacement(buf, "java");//找到的第偶数个java 转成小写,否则转为大写
    } else {
     m.appendReplacement(buf, "JAVA");
    }
   }
   m.appendTail(buf);//带上尾巴
   p(buf);
   */
  
   //group
   /*
   Pattern p = Pattern.compile("(
//d{3,5})([a-z]{2})");
   String s = "123aa-34345bb-234cc-00";
   Matcher m = p.matcher(s);
   while(m.find()) {
    p(m.group());
   }
   */
  
   //qulifiers
   /*
   Pattern p = Pattern.compile(".{3,10}+[0-9]");
   String s = "aaaa5bbbb68";
   Matcher m = p.matcher(s);
   if(m.find())
    p(m.start() + "-" + m.end());
   else
    p("not match!");
   */
  
   //non-capturing groups
   /*
   Pattern p = Pattern.compile(".{3}(?=a)");
   String s = "444a66b";
   Matcher m = p.matcher(s);
   while(m.find()) {
    p(m.group());
   }
   */
  
   //back refenrences
   /*
   Pattern p = Pattern.compile("(
//d(//d))//2");
   String s = "122";
   Matcher m = p.matcher(s);
   p(m.matches());
   */
  
   //flags的简写
   //Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
   //p("Java".matches("(?i)(java)"));
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值