廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则
正则表达式的匹配规则:
- 从左到右按规则匹配
| 匹配规则及示例 | 可以匹配 | 不能匹配 |
|---|---|---|
| "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正则表达式匹配规则的更多相关文章
- 廖雪峰Java9正则表达式-1正则表达式入门-1正则表达式简介
1.使用代码来判断字符串 场景: 判断字符串是否是有效的电话号码:"010-12345678", "123ABC456" 判断字符串是否是有效的电子邮箱地址:& ...
- 廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配
1.使用括号可以提取字符串 不加括号匹配电话号码 匹配成功后,如何提取想要的字符串? 使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$" 2.String.m ...
- 廖雪峰Java9正则表达式-2正则表达式进阶-6搜索和替换
1.使用正则表达式分割字符串: String[] string.split(String regex); "a b c".split("\\s");->[ ...
- 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配
1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...
- 爬取廖雪峰的python3教程
从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- 正则表达式30分钟入门教程<转载>
来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...
- python3爬虫之入门和正则表达式
前面的python3入门系列基本上也对python入了门,从这章起就开始介绍下python的爬虫教程,拿出来给大家分享:爬虫说的简单,就是去抓取网路的数据进行分析处理:这章主要入门,了解几个爬虫的小测 ...
- Python爬虫入门之正则表达式
在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...
随机推荐
- ZT 将sublime text的tab改为四个空格
打开Sublime Text3,选择菜单Preferences->Settings-User,打开用户配置文件(据本人理解,Settings-Default是不允许用户自己修改的~而Settin ...
- org.springframework.beans.factory.BeanCreationException 解决异常错误
一月 18, 2017 10:18:51 上午 org.apache.coyote.http11.Http11Protocol initINFO: Initializing Coyote HTTP/1 ...
- [转]EOS智能合约 & 私链激活 & 基本操作
链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...
- windows下配置maven
首先下载好maven的压缩包,然后解压到某个目录下,我解压到了D盘 打开readme.txt 1.2步已经完成,第3步的意思是让我们把bin所在的路径添加到系统变量的path中去 第4步意思是确保的你 ...
- MySQL Sending data导致查询很慢的问题详细分析【转载】
转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...
- Nginx在CentOS7下的安装
一,安装前的准备(Nginx安装之前,需要的工具以及依赖包:wget.gcc.pcre.openssl.zlib ) 1,wget安装 yum -y install wget 2,gcc安装 yum ...
- C++ 自定义时间
今天精神状态不好,和公司的领导请了假.为了抵抗我的痛苦,我在床上打坐冥想,从早上九点到下午三点二十六.嗯,感觉好多了.这种温和的暴力果然有效. 之后吃了点东西,然后无聊的我就在想,明天的工作该 ...
- Linux 配置SSH免密登陆
1.在hadoop01服务器上 通过ssh -keygen 生成公私钥 [ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa] 2.把公钥给hadoop02服务器 3. ...
- pymongo中的连接操作:Connection()与MongoClient()
class MongoClient(pymongo.common.BaseObject) Connection to MongoDB. Method resolution order: MongoCl ...
- 2-Add Two Numbers @LeetCode
2-Add Two Numbers @LeetCode 题目 思路 题目中得到的信息有: 这是两个非负数,每位分别保存在链表的一个结点上: 逆序保存,从低位到高位依次. 一般整数的相加都是从低往高进行 ...