码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2015-07-11 16:29:42      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

Pattern它是为满足图案

Matcher该模型是用来匹配所产生的结果字符串

String类本身matches这种方法。这表明该字符串不匹配这个模式(模式是输入String)


\d  表示一个数字  example       "a4dfds323".replaceAll("\\d","-")   前面那个‘\‘是转义字符

. 不论什么一个字符,并不包括行结束符

\D  不是数字的一个字符

\s  空白字符  包括[\t\n\f\r]

\S 不是空白字符

\w  a word char [a-zA-Z_0-9]

\W  a non-word char


X? X,一次或一次也没有
X* X,零次或多次
X+ X。一次或多次
X{n} X,恰好 n
X{n,} X。至少 n
X{n,m} X。至少 n 次。可是不超过 m

对于Email的匹配:

  public static final Pattern EMAIL_ADDRESS
      = Pattern.compile(
          "[a-zA-Z0-9\\+\\.\\_\\%\\-]{1,256}" +  //这个含义是至少有一个[a-zA-Z0-9]  然后能够有. _ % -
          "\\@" +                                //中间@
          "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +     //    
          "(" +
              "\\." +
              "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
          ")+"
      );

关于PhoneNumber的匹配:

 public static final Pattern PHONE
      = Pattern.compile(                                  // sdd = space, dot, or dash
              "(\\+[0-9]+[\\- \\.]*)?"                    // +<digits><sdd>*
              + "(\\([0-9]+\\)[\\- \\.]*)?"               // (<digits>)<sdd>*    p("()".matches("\\(\\)"))为true,括弧前必须加\              + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit> 


假设匹配一个空白行

public static void main(String[] args) {
		p(" \n".matches("^[\\s&&[^\\n]]+\\n$"));  //^代表开头 ,$表示结尾  true
	}
	
	public static void p(Object s) {
		System.out.println(s);
	}


分组:

Pattern p = Pattern.compile("\\d{3,5}[a-z]{2}");
		String s = "123aa-23434bb-234cc-00";
		Matcher m = p.matcher(s);
		while(m.find()){
			p(m.group());
		}
会打印出结果
123aa
23434bb
234cc

假设我们仅仅想要数字 我们必须把pattern改成:

Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
		String s = "123aa-23434bb-234cc-00";
		Matcher m = p.matcher(s);
		while(m.find()){
			p(m.group(1));
		}
结果:
123
23434
234

第一个左小括号是第一组。第二个小左括号是第二组


写一个比較简单的email的匹配:

p("sdfsdfsdfsdfsdf@163.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));  true \\w为单词字符  


关于Find:

	Pattern p = Pattern.compile("\\d{3,5}");
		String s = "123-34343-3434-00";
		
		Matcher m = p.matcher(s);  
//		p(m.matches());  //false  matches会跟find会冲突
//		m.reset();
		
		p(m.find());  //true 123
		//想知道起始位置和结束位置
		p(m.start()+"-"+m.end());  //0-3
		
		p(m.find());   //true 34343
		p(m.start()+"-"+m.end());  //4-9
		
		p(m.find());   //true 3434
		p(m.start()+"-"+m.end()); 
		
		p(m.find());  //false 00
	//	p(m.start()+"-"+m.end());  //输出这个会报错
		
		p(m.lookingAt());  //每一次找从開始的位置找。true
		p(m.lookingAt());  //每一次找从開始的位置找,true

关于替换:

Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
		StringBuffer buf = new StringBuffer();
		Matcher m = p.matcher("sfsdjavaeereJAVAdsfd");
		//要求把第一个小写的java换成大写的,第二个大写的JAVA换成小写的
		int i = 0;
		while(m.find()) {
			i++;
			if(i%2== 0) {
				m.appendReplacement(buf, "java");
			}else{
				m.appendReplacement(buf, "JAVA");
			}
		}
		m.appendTail(buf);
		p(buf);


Pattern pattern = Pattern.compile("\\[(\\S+?)\\]");
		Matcher matcher = pattern.matcher("[是]");
		while(matcher.find()) {
			System.out.println(matcher.group(1));
		}
出口'这是'


版权声明:本文博客原创文章。博客,未经同意,不得转载。

正则表达式

标签:

原文地址:http://www.cnblogs.com/gcczhongduan/p/4638651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!