package com.test.f;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testReg {
public static void main(String[] args) {
/**
* 1.正则表达式
a.jdk1.4 开始提供了正则表达式的支持;
b.java.util.regex
c.Pattern类:此类对象如果想要获得必须使用compile(), 此方法的功能是编译正则
d.Matcher类:通过Patern类取得;
2.正则标记
a.所有的正则可以使用的标记都在java.util.regex.Pattern类里面定义了;
b. 单个字符 (数量:1)
字符:表示由一位字符所组成;
\\ : 转义字符
\t :表示一个'\t'的符号;
\n :匹配换行(\n) 符号;
3.字符集(数量:1)
[abc] :表示可能是字符a,b,c中的任意一位
[^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有一种满足则可
(正则) 将多个正则作为一组,可以为这一组单独设置出先的次数
8. 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) 部分拆分;
**/
/**
* 1.将所有的非小写字母替换为"";
*/
String str="88drrrrr*RRE*&(33lslfWWWWabckdd";
String pattern="[^a-z]";
String replaceAll = str.replaceAll(pattern, "");
System.out.println(replaceAll);//drrrrrlslfabckdd
/**
* 2.根据数字拆分字母
*/
String str1="aaa55bb8888cc444444uuuuu55555uuKKKK";
String pattern1="\\d+";
String[] split = str1.split(pattern1);
for (String string : split) {
System.out.println(string);
}
/**
* 3.验证一个字符串是否式数字,如果是转为double
*/
String str3="1";
String pattern3="\\d+(\\.\\d+)?";
System.out.println(str3.matches(pattern3));
/**
* 4.判断给定的字符串是不是一个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));
/**
* 5.email校验
*/
//email
/* 用户名由字母、数字、字母、下划线、点组成
用户名 必须以字母开头 可以以数字和字母结尾
长度不能超过30位
最后的根域名只能是.com ,.cn ,.net,.com.cn,.edu,.gov,.org*/
String email="wwangtaoc.11@163.com";
//开头[a-zA-Z]
//中间段[a-zA-Z0-9_\\.]{0,28}
//结尾[a-zA-Z0-9]
//@
//紧跟@后面的 \\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));
/**
*
* 6.字符串拆分
*/
String str_split="aa3333bb333cc33dd3";
String reg="\\d+";
Pattern compile = Pattern.compile(reg);
String[] split2 = compile.split(str_split);
System.out.println(Arrays.toString(split2));
/**
* 7.字符串校验
* String类本身支持了这两种操作,所有对String而言很少再去利用Pattern和Matcher类这两个类进行操作;
可以实现代码的最小化
*/
String str6="323237";
String reg6="\\d+";
Pattern p = Pattern.compile(reg6);//编译正则
Matcher matcher = p.matcher(str6);//进行正则匹配
boolean matches = matcher.matches();
System.out.println(matches);//匹配的结果
/**
* 8. java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\'; System.out.println("a\nb\\");
.(点)匹配除"\r\n"之外的任何单个字符;
*/
String input1="hello ";
String p1="hello.";//.匹配任何一个字符 (hello后必须有一位)
System.out.println(Pattern.matches(p1, input1));
/**
* 9.手机号码
* 1.第一位是1,第二位是3,4,5,7,8,第三位则是0-9,第三位之后则是数字0-9;
* 2.x|y 匹配x或y;
* 3.()圆括号表示分为一组;
* 4.{}花括号表示出现的次数 ; +表示一个或多个; *表示零个或多个;?表示零个或一个;
* 5.{n} 表示匹配n次;{n,}至少匹配n次;{m,n}匹配至少m次,最多n次;
* 6.\\d数字字符匹配。等效于 [0-9];
* 7.'\\' 在java中'\'本身具有转义意义;如果要输出'\' 需要使用'\\';
* 8.'^'配输入字符串开始的位置;
*/
String input2="q1767319565";
String pattern2="1(3|4|5|7|8)\\d{9}";
boolean matches2 = Pattern.matches(pattern2, input2);
System.out.println("手机号码:"+matches2);
/**
* 10.email
* 1.26个大小写英文字母表示为a-zA-Z
* 2.数字表示为0-9
* 3.下划线表示为_
* 4.中划线表示为-
* 5.由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现
* 6.[] 字符组/字符集
* 7.\\. 匹配点
*/
String input3="www@qq.com";
String p3="[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+";
System.out.println(Pattern.matches(p3, input3));
/**
* 11.两位正整数
*
*/
String input4="q1";
String p4="\\d{2}$"; //javaScript:var p=/^\d{1,2}$/
System.out.println("两位正整数:"+Pattern.matches(p4, input4));
/**
* 12.数字 :大于等于0的数(整数和小数(保留两位))
*/
String pattern5="\\d+(\\.\\d{2}+)?";//javaScript: var p=/^\d+(\.\d{2}+)?$/;
String input5="1.44";
System.out.println("大于等于0的数(整数和小数(保留两位)): "+Pattern.matches(pattern5, input5));
/**
* 13.数字(整数、负数、小数(保留两位小数))
*/
String input6="-10.98";
String pattern6="(\\-|\\+)?\\d+(\\.\\d{2}+)?";//javaScript:var pattern6="/^(\-|\+)?\\d+(\.\d{2}+)?$/"
System.out.println("数字(整数、负数、小数(保留两位小数)): "+Pattern.matches(pattern6, input6));
/**
* 14.数字1-99之间的包含1和99的数
*
*/
String input7="99";
String pattern7="[1-9][0-9]?";//javaScript: var pattern7="/^[1-9][0-9]?$/";
System.out.println(Pattern.matches(pattern7, input7));
}
}