正则表达式:RegularExpressions(字符串处理利器)
都在java.util.regex.*;包中
样例:
转载请注明出处 : http://blog.youkuaiyun.com/acmman
都在java.util.regex.*;包中
样例:
package cn.edu.RegularExpressions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Test {
public static void main(String[] args) {
//简单理解正则表达式
System.out.println("abc".matches("..."));
//其中“\d”代表一个数字(0-9)
System.out.println("a324234a".replaceAll("\\d", "-"));
Pattern p=Pattern.compile("[a-z]{3}");
Matcher m=p.matcher("fgh");
System.out.println(m.matches());
System.out.println("fgha".matches("[a-z]{3}"));
/*结果
* true
a------a
true
false
* */
//初步认识. * +
p("1:"+"a".matches("."));//
p("2:"+"aa".matches("aa"));//true,正则表达式可以写正常的字符
p("3:"+"aaaa".matches("a*"));//“*”代表的是0个或者多个
p("4:"+"aaaa".matches("a+"));//“+”代表的是1个或者多个
p("5:"+"".matches("a*"));
p("6:"+"aaaa".matches("a?"));//“?”代表的是0个或1个
p("7:"+"".matches("a?"));
p("8:"+"a".matches("a?"));
p("9:"+"2342342432423234".matches("\\d{3,100}"));//“{”与“}”代表出现的次数(几次,至少几次,最多几次最少几次)
//最简单的检测IP地址的方式:
p("10:"+"192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
p("11:"+"192".matches("[0-2][0-9][0-9]"));//“[]”代表一个范围
/*结果:
1:true
2:true
3:true
4:true
5:true
6:false
7:true
8:true
9:true
10:false
11:true*/
p("a".matches("[abc]"));
p("a".matches("[^abc]"));
p("A".matches("[a-zA-Z]"));
p("A".matches("[a-z] | [A-Z]"));
p("A".matches("[a-z[A-Z]]"));
p("R".matches("[A-Z&&[RFG]]"));
/*true
false
true
false
true
true*/
/*
* "."代表任何字符
* "/d"[0-9]的数字
* "/D"非[0-9]的数字[^\d]
*"/s"空白字符(包括空格,Tab键\t,换行\n,backspace后退键/x0B,制表符/f,回车/r)
* "/S"非“空白字符”[^\s]
* "/w"单词字符[a-zA-Z_0-9]
* "/W""非“单词字符”[^\w]
*/
p(" \n\r\t".matches("\\s{4}"));
p(" ".matches("\\S"));
p("a_8".matches("\\w{3}"));
p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
p("\\".matches("\\\\"));//在matches中,一个"\"要用"\\"来表示
/* true
false
true
true
true*/
//POSIX Style
p("a".matches("\\p{Lower}"));
/*true*/
//边界匹配
//"^"位于中括号里面的时候是取反的意思,位于外面代表的是输入的开头
p("hello sir".matches("^h.*"));//以"h"开头
p("hello sir".matches(".*ir$"));//以"ir"结尾
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//\b一个单词的边界(空格,空白字符,换行,特殊字符)
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));
/*true
true
false*/
//把空白行找出来
p(" \n".matches("^[\\s&&[^\\n]]*\\n"));//以空白字符开头,并且不是换行符,出现0次或多次
/*true*/
//匹配email地址的正则表达式(有得email地址是含有横线和点号的)
p("basdbjasbkja@dasbdn.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));
//matches find lookingAt
Pattern p1=Pattern.compile("\\d{3,5}");//编译正则表达式
String s="123-34345-234-00";
Matcher m1=p1.matcher(s);
p(m1.matches());
//false
//find()一段一段的匹配
//分析到“-”时,不符合p1的标准,认为结束
m1.reset();//matches与find一起使用时需要reset
p(m1.find());
p(m1.start()+"-"+m1.end());//输出“-”的起始位置和结束位置(结束位置就是本身位置)
p(m1.find());
p(m1.start()+"-"+m1.end());
p(m1.find());
p(m1.start()+"-"+m1.end());
p(m1.find());
// true
// true
// true
// false
p(m1.lookingAt());
//true
//区别matches找整个串
//find找字串
//lookingAt每次都从头上开始找
//字符串的替换
Pattern p2=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//CASE_INSENSITIVE忽略大小写
Matcher m2=p2.matcher("java Java JAVa JaVa IloveJAVA you hateJava lalalala");
while(m2.find()){
p(m2.group());//按组找
}
p(m2.replaceAll("JAVA"));
//全部改为JAVA JAVA JAVA JAVA IloveJAVA you hateJAVA
m2.reset();
StringBuffer buf=new StringBuffer();
int i=0;
while(m2.find()){
i++;
if(i%2==0){//奇数大写偶数小写
m2.appendReplacement(buf, "java");
}else{
m2.appendReplacement(buf, "JAVA");
}
}
m2.appendTail(buf);//将尾巴加进去
p(buf);
//JAVA java JAVA java IloveJAVA you hatejava lalalala
//分组:使用小括号组成的,分了机组就有几对小括号
//每个组有自己的组号
Pattern p3=Pattern.compile("(\\d{3,5})([a-z]{2})");
String s1="123aa-12323bb-456cc-00";
Matcher m3=p3.matcher(s1);
while(m3.find()){
p(m3.group());//按组找
p(m3.group(1));
p(m3.group(2));
}
/*123aa
123
aa
12323bb
12323
bb
456cc
456
cc*/
}
public static void p(Object o){
System.out.println(o);
}
}
转载请注明出处 : http://blog.youkuaiyun.com/acmman