1.正则表达式
jdk1.4 开始提供了正则表达式的支持;
java.util.regex
Pattern类:此类对象如果想要获得必须使用compile(),
此方法的功能式编译正则
Matcher类:通过Patern类取得;
2.正则标记
1.所有的正则可以使用的标记都在java.util.regex.Pattern类里面定义了;
2. 单个字符 (数量:1)
字符:表示由一位字符所组成;
\\ : 转义字符
\t :表示一个'\t'的符号;
\n :匹配换行(\n) 符号;
3.字符集(数量:1)
[abc] :表示可能是字符a,b,中的任意一位
[^abc]:表示不是a,b,c中的任意一位
[a-z]:所有的小写字母
[a-zA-Z]:所有的字母
[0-9] :任意的一位数字
4.简化的字符集表达式(数量:1)
. :表示任意一个字符
\d :等价于[0-9]
\D :非0-9的字符
\s :表示任意的空白字符 如'\t','\n'
\S :表示任意的非空白字符;
\w :等价于[a-zA-Z0-9_] 表示由任意的字母,数字,-,组成
\W :表示[^a-zA-Z0-9_]
5.边界匹配(不要再java中使用,再javaScript中使用)
^:正则开始
$:正则结束
6.数量表达式
正则?:表示此正则可以出现0次或1次
正则+:表示此正则可以出现1次或1次以上;
正则{n}:表示此正则可以出现n次
正则{n,}:表示此正则出现n次以上(包含n次)
正则{n,m}:表示此正则出现n次到m次
7.正则1正则2 :正则1判断完成后继续判断正则2
正则1|正则2 :正则1或正则2有一种满足则可
(正则) 将多个正则作为一组,可以为这一组单独设置出先的次数
String类对正则的支持
jdk1.4 引入了正则的支持,Stirng类也添加了相应的支持
matches(String regex) 正则验证,使用指定的字符串判断其是否满足给定的正则表达式的结构;
replaceAll(String regx,String replacement)全部替换
replaceFirst(String regx,String replacement)替换首个
split(String regex)全部拆分;
split(String regex,int limit) 部分拆分;
//将所有的非小写字母替换为"";
String str="88drrrrr*RRE*&(33lslfWWWWabckdd";
String pattern="[^a-z]";
String replaceAll = str.replaceAll(pattern, "");
System.out.println(replaceAll);//drrrrrlslfabckdd
//根据数字拆分字母
String str1="aaa55bb8888cc444444uuuuu55555uuKKKK";
String pattern1="\\d+";
String[] split = str1.split(pattern1);
for (String string : split) {
System.out.println(string);
}
//验证一个字符串是否式数字,如果是转为double
String str3="1";
String pattern3="\\d+(\\.\\d+)?";
System.out.println(str3.matches(pattern3));
//判断给定的字符串是不是一个ip地址 192.168.1.1 每一段最大长度是3
String str4="192.168.1.1";
String pattern4= "(\\d{1,3}\\.){3}\\d{1,3}";
System.out.println(str4.matches(pattern4));
//email
/* 用户名由字母、数字、字母、下划线、点组成
用户名 必须以字母开头 可以以数字和字母结尾
长度不能超过30位
最后的根域名只能是.com ,.cn ,.net,.com.cn,.edu,.gov,.org*/
String email="[email protected]";
//开头[a-zA-Z]
//中间段[a-zA-Z0-9_\\.]{0,28}
//结尾[a-zA-Z0-9]
//@
//紧跟@后面的e \\w+
// \\.
//(net|cn|com|com\\.cn|net\\.cn|edu|gov|org)
String pattern_email="[a-zA-Z][a-zA-Z0-9_\\\\.]{0,28}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\\\.cn|net\\\\.cn|edu|gov|org)";
System.out.println(email.matches(email));
//字符串拆分
String str_split="aa3333ddddd333ddlll33ll3";
String reg="\\d+";
Pattern compile = Pattern.compile(reg);
String[] split2 = compile.split(str_split);
System.out.println(Arrays.toString(split2));
//字符串验证
String str6="323237";
String reg6="\\d+";
Pattern p = Pattern.compile(reg);//编译正则
Matcher matcher = p.matcher(str6);//进行正则匹配
System.out.println(matcher.matches());//匹配的结果
//String类本身支持了这两种操作,所有对String而言很少再去利用Pattern和Matcher类这两个类进行操作;
//可以实现代码的最小化
//正则表达式
// java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\'
// System.out.println("a\nb\\");
String input1="hello ";
String pattern1="hello.";//.匹配任何一个字符 (hello后必须有一位)
//.(点)匹配除"\r\n"之外的任何单个字符;
System.out.println(Pattern.matches(pattern1, input1));
//手机号码(第一位是1,第二位是3,4,5,7,8,第三位则是0-9,第三位之后则是数字0-9)
String input2="17673195654";
String pattern2="^1(3|4|5|7|9)\\d{9}";
// x|y 匹配x或y
// ()圆括号表示分一组组
// {}花括号表示出现的次数 ; +表示一个或多个; *表示零个或多个;?表示零个或一个;
// {n} 表示匹配n次;{n,}至少匹配n次;{m,n}匹配至少m次,最多n次
// \\d数字字符匹配。等效于 [0-9]。
// '\\' 在java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\'
// '^'配输入字符串开始的位置
System.out.println(Pattern.matches(pattern2, input2));
//邮箱
//26个大小写英文字母表示为a-zA-Z
// 数字表示为0-9
//下划线表示为_
//中划线表示为-
// 由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现
String input3="[email protected]";
String pattern3="^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$";
System.out.println(Pattern.matches(pattern3, input3));
// [] 字符组/字符集
// \\. 匹配点
//两位正整数
String input4="1";
String pattern4="^\\d{1,2}$";
System.out.println(Pattern.matches(pattern4, input4));
//数字 :大于等于0的数(整数和小数(保留两位))
String pattern5="^\\d+(\\.\\d{2}+)?$";
String input5="1.44";
System.out.println(Pattern.matches(pattern5, input5));
//数字(整数、负数、小数(保留两位小数))
String input6="-10.98";
String pattern6="^(\\-|\\+)?\\d+(\\.\\d{2}+)?$";
System.out.println(Pattern.matches(pattern6, input6));
//数字1-99之间的包含1和99的数
String input7="99";
String pattern7="^[1-9][0-9]?$";
System.out.println(Pattern.matches(pattern7, input7));