正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。是用正则表达式来完成邮箱,账号的验证可以省去繁杂的逻辑,用更少的代码完成更复杂的事务。
通过学习我大致把当前学习的常见的字符分为四种:
1,预定义字符类
- .:任何字符
- \d : 数字[0-9]
- \D:非数字[^0-9]
- \s : 空白字符[\t\n\xOB\f\r]
- \S : 非空白字符[^\s]
- \w : 单词字符[a-zA-Z_0-9]
- \W : 非单词字符[^\w]
2,数量词
- X? X,一次或一次也没有;
- X* X,零次或多次;
- X+ X,一次或多次;
- X{n} X,恰好n次;
- X{n,} X,至少n次;
- X{n,m} X,至少n次,不超过m次;
3,表示逻辑运算的词
正则表达式中的逻辑运算的词和java中逻辑运算符基本相同,除了逻辑非在正则表达式中是使用 ^ 表示
4,三个括号的使用
- [ ]方括号中一般放预定义字符类,多个字符之间用默认逻辑或连接。
例如:
[abc] 表示a或b或c
[A-Za-z_0-9] 表示单词字符 - { }花括号表示数量词
- ( )圆括号表示捕获组,圆括号中的内容作为一组来被识别
例如:
(abc) 表示abc
在圆括号中可以使用逻辑符号连接
例如:
(abc|def)表示abc或def
感觉把正则表达式大致的分为这三个类会更好理解,记忆,学习以及使用
在API文档Pattern类下提供的正则表达式的典型调用方法是
在API文档Pattern类下提供的正则表达式的典型调用方法是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
平时使用时可以直接调用String类下的matchs()方法
matches
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:
Pattern.matches(regex, str)
参数:
regex - 用来匹配此字符串的正则表达式
返回:
当且仅当此字符串匹配给定的正则表达式时,返回 true
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern
正则表达式的常见应用
- 用正则表达式验证邮箱账号
/**
* 邮箱验证
*6-18位任意单词字符+@+2-6位任意单词字符+一位或多位.+任意单词字符
*/
public static void test1(String str2) {
String str="\\w{6,18}@\\w{2,6}(\\.\\w)+";
//Scanner sc=new Scanner(System.in);
System.out.println("请输入邮箱");
//String str2=sc.next();
System.out.println("str2.matches(str) "+str2.matches(str));
}
2 .正则表达式完成切割指定字符的功能
/**
*
* 切割 字符串中的逗号
*/
public static void test2() {
String numbers="1,2,3,4,5,6,7,8,9,0";
String regex=",";
String [] str=numbers.split(regex);
for(int i=0;i<str.length;i++) {
System.out.println(str[i]);
}
}
3 . 正则表达式玩成替换指定字符的功能
/**
*
* 替换字符串中的单词字母
*/
public static void testReplace() {
String str="aaaa1ahnvuhfewoi11384209e7439fsdhfdohd8892489";
String regex="[a-zA-Z]";
String str2=str.replaceAll(regex, "");
System.out.println(str2);
//输出 11138420974398892489
}
4 . 匹配并取出指定的字符串
/**
*
*
* 取出指定的字符串
*/
public static void testBoundary() {
// 定义字符串
String s = "abc 1234 efg a d,e hhh aa";
// 规则 单词边界+三位任意字符+单词边界
String regex = "\\b\\w{3}\\b";
// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
//第一步,找到 find()
while (m.find()) {
//第二步 ,把找到的东西拿出来 group
String string = m.group();
System.out.println(string);
//输出abc efg hhh
}
}
5.正则表达式的分组功能
/**
*
* 分组
* (..)表示两位任意字符(...)表示三位任意字符1+表示第一个()的内容重复
* 一次或者多次
*/
public static void testRegexGroup() {
String regex="(..)(...)\\1+";
System.out.println("高兴高高兴高兴高兴高兴高兴".matches(regex));
//输出true
System.out.println("快快乐乐".matches(regex));
//输出false
}