正则表达式的匹配规则:

  • 从左到右按规则匹配
匹配规则及示例 可以匹配 不能匹配
"abc" "abc" 不能匹配:"ab", "Abc", "abcd"
特殊字符需要转义,如"a&c",注意Java的字符串需要再加一个转义符 "a&c" "ab", "abc", "a&cd"
非ascii字符用"\u####"表示一个unicode字符,如"a\u548cc" "a和c" "a与c","a&c","abc"
. 可以匹配任意一个字符:"a.c" "abc", "a&c" "ac", "abbc"
\d 可以匹配一个数字:"00\d" "007", "008" "00A", "0077"
\D可以匹配一个非数字:"00\D" "00A", "00#" "001"
\w可以匹配一个字母、数字或下划线:"java\w" "javac", "java8", "java_", "java#", "java "
\s可以匹配一个空白字符:"A\sB" "A B" "A B",tab键也算空白字符 "AB" "A B"
\W可以匹配一个非字母、数字或下划线:"java\W" "java!", "java " "javac", "java8", "java_"
\S可以匹配一个非空白字符:"A\SB" "A&B", "ABB" "A B","A B"tab键也算空白字符
修饰符可以匹配前的任意个字符:"A\d*",先匹配字母A,再匹配任意多个数字 "A", "A1", "A007" "AB"
修饰符+可以匹配+前的至少一个字符:"A\d+",先匹配字母A,再匹配至少1个数字 "A1","A007" "A", "AB"
修饰符?可以匹配0个或1个字符:"A\d?",先匹配字母A,再匹配0个或1个数字 "A","A1" "A12","AB"
修饰符{n}可以匹配n个字符:"\d{6}" "123456", "999999" "12345","1234567", "12345A"
修饰符{m,n},可以匹配m-n个字符"\d{3,5}" "123", "12345" "12","12345", "123A5"
修饰符{n,}可以匹配至少n个字符:"\d{3,}" "123", "1234", "123456789" "12","123A"
^和\(匹配开头和结尾:"^A\d{3}\)" "A001", "A999" "B001", "A0001"
[...]可以匹配范围内的字符: "[abc]1" "a1", "b1", "c1" "ab1", "x1"
"[a-f]1" "a1", "b1", "f1" "g1", "ab1"
"[a-f0-9]{6}" "1a2b3c", "ffffff", "ff0102" "abc12", "A0000F"
[^...] 在中括号内表示非,"[0-9]{6} 6位非数字字符串 "abcdef", "$$$$$$", "A-B-C-" "1a2b3c", "A0000F"
AB|CD可以匹配AB或CD;如"java|php" "java", "php" "C++", "jphp"
"learn\s(java|php)" "learn java", "learn php" "learn C++", "learn python"
"learn\sjava|php" "learn java", "php" "learn java", "learn php"
package com.testRegex;

public class Telephone {
public static Boolean invaildTel(String s) {
return s.matches("\\d{3,4}\\-\\d{6,8}");
}
}
package com.testRegex;

import static org.junit.Assert.*;

import org.junit.Test;

public class TelephoneTest {

	@Test
public void testInvaildTel() {
assertTrue(Telephone.invaildTel("010-123456"));
assertTrue(Telephone.invaildTel("010-12345678"));
assertTrue(Telephone.invaildTel("0123-123456"));
assertTrue(Telephone.invaildTel("0123-12345678"));
assertTrue(Telephone.invaildTel("123-123456"));
assertTrue(Telephone.invaildTel("123-12345678")); assertFalse(Telephone.invaildTel("010#123456"));
assertFalse(Telephone.invaildTel("010X12345678"));
assertFalse(Telephone.invaildTel("01-12345678"));
assertFalse(Telephone.invaildTel("01234-12345678"));
assertFalse(Telephone.invaildTel("01A-12345678"));
assertFalse(Telephone.invaildTel("0123-12345"));
assertFalse(Telephone.invaildTel("0123-12345X"));
assertFalse(Telephone.invaildTel("0123-123456789"));
assertFalse(Telephone.invaildTel("0123-12345678X"));
}
}


匹配QQ号,非0开头的5到11位数字字符串

package com.testList;

public class QQ {
public static Boolean isVaildQQ(String s){
return s.matches("^[1-9]\\d{4,10}$");
}
}
package com.testList;

import org.junit.Test;

import static org.junit.Assert.*;

public class QQTest {

    @Test
public void isVaildQQ() {
assertTrue(QQ.isVaildQQ("10000"));
assertTrue(QQ.isVaildQQ("99999"));
assertTrue(QQ.isVaildQQ("1234567890"));
assertTrue(QQ.isVaildQQ("9999999999")); assertFalse(QQ.isVaildQQ("00001"));
assertFalse(QQ.isVaildQQ("099999"));
}
}

电话号码优化,区号必须以0开头,电话号码不能以0开头

package com.testList;

public class Phone{
public static boolean isVaildPhone(String s){
return s.matches("^0\\d{2,3}(\\-|\\s)[1-9]\\d{6,7}$");
}
}
package com.testList;

import org.junit.After;
import org.junit.Before;
import org.junit.Test; import static org.junit.Assert.*; public class PhoneTest {
@Test
public void testIsVaildPhone(){
assertTrue(Phone.isVaildPhone("012-12345678"));
assertTrue(Phone.isVaildPhone("012 12345678"));
assertTrue(Phone.isVaildPhone("0123 1234567"));
assertTrue(Phone.isVaildPhone("0123-1234567"));
assertTrue(Phone.isVaildPhone("012 12345678")); assertFalse(Phone.isVaildPhone("123-12345678"));
assertFalse(Phone.isVaildPhone("123-0123456"));
assertFalse(Phone.isVaildPhone("023-0123456"));
assertFalse(Phone.isVaildPhone("023-01234567"));
}
}

廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则的更多相关文章

  1. 廖雪峰Java9正则表达式-1正则表达式入门-1正则表达式简介

    1.使用代码来判断字符串 场景: 判断字符串是否是有效的电话号码:"010-12345678", "123ABC456" 判断字符串是否是有效的电子邮箱地址:& ...

  2. 廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配

    1.使用括号可以提取字符串 不加括号匹配电话号码 匹配成功后,如何提取想要的字符串? 使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$" 2.String.m ...

  3. 廖雪峰Java9正则表达式-2正则表达式进阶-6搜索和替换

    1.使用正则表达式分割字符串: String[] string.split(String regex); "a b c".split("\\s");->[ ...

  4. 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配

    1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...

  5. 爬取廖雪峰的python3教程

    从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...

  6. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  7. 正则表达式30分钟入门教程<转载>

    来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...

  8. python3爬虫之入门和正则表达式

    前面的python3入门系列基本上也对python入了门,从这章起就开始介绍下python的爬虫教程,拿出来给大家分享:爬虫说的简单,就是去抓取网路的数据进行分析处理:这章主要入门,了解几个爬虫的小测 ...

  9. Python爬虫入门之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

随机推荐

  1. 派生 de rive

    ''' de rive 派生 python2 (经典类|新式类) python3 (新式类) 1. What is derive? 什么是派生? 派生:子类定义自己新的属性,如果与父类同名,以子类自己 ...

  2. 最新版本汉化-PowerDesigner 16.6 汉化并河蟹

    更新日志: 2019-03-14 V1.1 1.支持反复多次汉化: 2.修复少许bug. 最新的16.6版本已经在汉化中了,基本上所有的菜单均已汉化完成,部分窗体还没有编译通过. 不过,不影响尝鲜使用 ...

  3. SQL 姓名,联系方式-脱敏

    SELECT ORDER_PROJECT.project_type AS attribute, ORDER_PROJECT.order_num, ,), "*") AS pv, C ...

  4. JAVA005-基本数据类型变量的存储

    1.变量按类型分: 数据类型分为基本数据类型和引用数据类型 引用数据类型包括数组和类等 类定义的变量又叫对象 2.按照作用范围分为: 类级别.对象实例级.方法级.块级 方法级:局部变量 3.字符型的字 ...

  5. spring 集成redis客户端jedis(java)

    spring集成jedis简单实例   jedis是redis的java客户端,spring将redis连接池作为一个bean配置. “redis.clients.jedis.JedisPool”,这 ...

  6. Vue基础之计算属性

    适用场景 设想一个场景,你需要得到一个复杂运算/逻辑的返回值,利用模板内的表达又过长且难以阅读和维护,这时计算属性就可以很好的解决你的问题.看下面的例子: <!DOCTYPE html> ...

  7. C语言中的一维数组

    一.一维数组的定义和引用 (1)一维数组的定义 类型说明符表示数组中的元素类型 数组标识符该数组型变量的名称,命名规则与变量名一致 常量表达式定义了数组中存放的数据元素的个数. (2)一维数组的引用 ...

  8. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  9. PTA1

    1-1 数组定义中,数组名后是用方括号括起来的常量表达式,不能用圆括号. (1分) [T ] F 1-2 在C语言中能逐个地使用下标变量,也能一次引用整个数组. (1分) T [F]因为它有首地址 1 ...

  10. SpringMVC和Struts2区别比较

    区别1: Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilterSpringMvc的核心是基于一个Servlet即DispatcherServlet( ...