Java正则表达式

package com.sy.grasp;

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

public class RegularExpression {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  /*String [] fakeFileData ={
    "justin/t64/5/26/t09323432434/t4546465",
    "momor/t68/7/23/t43543653/t34535435"
  };
  
  for(String data : fakeFileData){
   String[] tokens=data.split("/t");
   for(String token:tokens){
    System.out.print(token+"/t|");
   }
   System.out.println();
  }

 * 显示结果:
 * justin |64/5/26 |09323432434 |4546465 |
   momor |68/7/23 |43543653     |34535435 |
 * */
  /*String text="abcdebcadxbc";
  String[] tokens=text.split(".bc");
  for(String token:tokens){
   System.out.print(token+" ");
  }
  
  System.out.println();
  
  tokens=text.split("..cd");
  for(String token:tokens){
   System.out.print(token+" ");
  }
  
  System.out.println();
  
  
   * 返回结果是:
   *  d ad
            ebcadxbc
            解释:使用.bc来作比对,由于符合的子字符串有abc ebc xbc 3个,所以split()方法会使用这三个字符串来做字符串分离
            ,返回的就是不符合表达式.bc的d和ad了,同理..cd
          
   * */
  
  /*BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
  System.out.println("abcdefgabcabc".replaceAll(".bc", "###"));
  
  String phoneEL="[0-9]{4}-[0-9]{6}";
  String urlEL="<a.+href*=*['/"]?.*?['/"]?.*?>";
  String emailEL="^[_a-z0-9-]+(.[_a-z0-9-]+)*"+
      "@[a-z0-9-]+([.][a-z0-9-]+)*$";
  System.out.print("输入手机号码:");
  String input=reader.readLine();
  
  if(input.matches(phoneEL)){
   System.out.println("格式正确!");
  }else
   System.out.println("格式不正确!");
  
  System.out.print("输入href标签:");
  input=reader.readLine();
  
  if(input.matches(urlEL)){
   System.out.println("格式正确!");
  }else
   System.out.println("格式不正确!");
  
  System.out.print("输入Email标签:");
  input=reader.readLine();
  
  if(input.matches(emailEL)){
   System.out.println("格式正确!");
  }else
   System.out.println("格式不正确!");
  
  执行结果:
   * ###defg######
   输入手机号码:0791-7143391
   格式不正确!
   输入href标签:http:
   格式不正确!
   输入Email标签:sy_anhui@sina.com
   格式正确!

   * 0791-7143391格式不正确,原因是后面是6位数字。
   * */
  
  /* String phones1="Justin的手机号码:0939-100391/n"+
      "Moda的手机号码:0939-324341/n";
  Pattern pattern=Pattern.compile(".*0939-//d{6}");
  Matcher matcher=pattern.matcher(phones1);
  
  while(matcher.find()){
   System.out.println(matcher.group());
  }
  
  String phones2="sunyuan的手机号:1233-342424/n"+
      "bush的手机号:0939-344125";
  
  matcher=pattern.matcher(phones2);
  while(matcher.find()){
   System.out.println(matcher.group());
  }
  
   * 执行结果:
   * Justin的手机号码:0939-100391
     Moda的手机号码:0939-324341
     bush的手机号:0939-344125
   * */
  
  String text="abcdebcadxbc";
  
  Pattern pattern=Pattern.compile(".bc");
  Matcher matcher=pattern.matcher(text);
  while(matcher.find()){
   System.out.println(matcher.group());
  }
  System.out.println();
  /*执行结果:
   * abc
   ebc
   xbc
   * */
  
  /*
   * 下面简介一下Pattern和Matcher
   * String上可以使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与
   * java.util.regex.Matcher的功能。当调用String的matches()方法时,实际上是调用Pattern
   * 的静态方法matches(),这个方法会返回boolean值,表示字符串是否符合正则表达式。
   * 如果想要将正则表达式视为一个对象来重复使用,可以使用Pattern的静态方法complie()
   * 方法进行编译,complie()方法会返回一个Pattern 的实例,这个实例
   * 代表正则表达式,之后就可以重复使用Pattern的实例的matcher()方法
   * 来返回一个Matcher的实例,代表符合正则式的实例,这个实例上有一些寻找符合正则式条件的方法可供操作。
   *
   * */
 }
 

}
、下面总结一下基本的正则表达式的meta character以及它们含义:
.  匹配任意一个字符 $ 匹配一行的结尾 ^ 匹配一行的开头(在[]里面表示否定)
{} 定义了一个范围  [] 定义了一个字符类 () 定义了一个组
*前面出现0次以上   + 前面匹配一次以上 ?前面出现0次或一次  
/ 后面的字符不会看作metacharacter  /w 字母数字下划线 /W 非字母数字下划线
/d 单个数字 /D单个非数字 | 或,二者之一 &&与操作符 /b单词边界
下面看看几个简单的例子:
[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](减去)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值