正则表达式

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));
		}
出口'这是'


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值