Day 10:浅谈正则表达式
正则表达式
以检验扣扣号是否合法为例引入正则表达式
要求:校验QQ号,要求:必须是5~15位数字,0不能开头。
1.没有正则表达式
public class Demo1 {
public static void main(String[] args) {
String qq="45646465";
checkQQ(qq);
}
public static void checkQQ(String qq)
{
int len = qq.length();
if(len>=5 && len <=15)
{
if(!qq.startsWith("0"))
{
try
{
long l = Long.parseLong(qq);
System.out.println("qq:"+l);
}
catch (NumberFormatException e)
{
System.out.println("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.out.println("QQ号长度错误");
}
}
2.使用正则表达式
public class Demo1 {
public static void main(String[] args) {
String qq="45646465";
System.out.println(qq.matches("[1-9]\\d{4,14}")?"true":"false");
}
什么是正则表达式?
正则表达式:其实一种规则,有自己特殊的应用,其作用就是针对于字符串进行操作。
正则:就是用于操作字符串的规则,其中这些规则使用了一些字符表示。
正则表达式的符号(一部分)
预定义字符类
|
. |
任何字符(与行结束符可能匹配也可能不匹配) |
|
|
\d |
数字:[0-9] |
|
|
\D |
非数字: [^0-9] |
|
|
\s |
空白字符:[ \t\n\x0B\f\r] |
|
|
\S |
非空白字符:[^\s] |
|
|
\w |
单词字符:[a-zA-Z_0-9] |
|
|
\W |
非单词字符:[^\w] |
|
|
System.out.println("a".matches(".")); System.out.println("1".matches("\\d")); System.out.println("%".matches("\\D")); System.out.println("\r".matches("\\s")); System.out.println("^".matches("\\S")); System.out.println("a".matches("\\w")); |
||
Greedy 数量词
|
X? |
X,一次或一次也没有 |
|
X* |
X,零次或多次 |
|
X+ |
X,一次或多次 |
|
X{n} |
X,恰好n次 |
|
X{n,} |
X,至少n次 |
|
X{n,m} |
X,至少n次,但是不超过m次 |
|
System.out.println( "a".matches(".") ); System.out.println( "a".matches("a") ); System.out.println("a".matches("a?") ); System.out.println( "aaa".matches("a*") ); System.out.println( "".matches("a+") ); System.out.println( "aaaaa".matches("a{5}") ); System.out.println( "aaaaaaaaa".matches("a{5,8}") ); System.out.println( "aaa".matches("a{5,}") ); System.out.println( "aaaaab".matches("a{5,}") ); |
|
范围表示
|
[abc] |
a、b 或 c(简单类) |
|
[^abc] |
任何字符,除了 a、b 或 c(否定) |
|
[a-zA-Z] |
a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
|
[a-d[m-p]] |
a 到 d 或 m 到 p:[a-dm-p](并集) |
|
[a-z&&[def]] |
d、e 或 f(交集) |
|
[a-z&&[^bc]] |
a 到 z,除了 b 和 c:[ad-z](减去) |
|
[a-z&&[^m-p]] |
a 到 z,而非 m 到 p:[a-lq-z](减去) |
|
System.out.println( "a".matches("[a]") ); System.out.println( "aa".matches("[a]+") ); System.out.println( "abc".matches("[abc]{3,}") ); System.out.println( "abc".matches("[abc]+") ); System.out.println( "dshfshfu1".matches("[^abc]+") ); System.out.println( "abcdsaA".matches("[a-z]{5,}") ); System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") ); System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") ); System.out.println( "abdxyz".matches("[a-c[x-z]]+")); System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}")); System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}")); |
|
正则表达式经常实现的功能
匹配matches
例题:是否为一个合法的手机号码
//匹配是否为一个合法的手机号码
public class Demo5 {
public static void main(String[] args) {
String telephoneNuumber = "18809405364";
System.out.println(checkTel(telephoneNuumber)?"合法":"不合法");
}
public static boolean checkTel(String a) {
String b = a;
String c = "1[34578]\\d{9}";//[0-9]数字在0-9,\\d只能是数字,{11}恰好11位数字
boolean f = b.matches(c);
return f;
}
}
切割功能split
例题:根据空格对一段字符串进行切割
import java.lang.reflect.Array;
import java.util.Arrays; //匹配是否为一个合法的手机号码
public class Demo4 {
public static void main(String[] args) { String str = "aa bb cc ";
System.out.println(splitDemo(str));
}
public static String splitDemo(String str) {
String str1 = str;
String[] arr = str1.split(" +");
return Arrays.toString(arr); }
}
例题:根据重叠词进行切割
分组概念((A)(B(C)))
第1组 ((A)(B(C)))
第2组 (A)
第3组 (B(C))
第4组 (C)
import java.util.Arrays;
public class Demo3 {
public static void main(String[] args) {
String str = "sdqqfgkkkhjppppkl";
System.out.println(splitDemo2(str));
}
public static String splitDemo2(String str)
{
String str1 = str;
String[] arr = str1.split("(.)\\1+");
return Arrays.toString(arr);
}
}
替换功能replaceAll
例题:把手机号替换成“*”号
public class Demo2 {
public static void main(String[] args) {
replaces();
}
public static void replaces() {
String str = "联系方式:13327351612,联系方式:13327351612,联系方式:13327351612,联系方式:13327351612,联系方式:13327351612";
String reg = "1[34578]\\d{9}";
str = str.replaceAll(reg, "********");
System.out.println(str);
}
}
获取
获取需要使用到正则的两个对象:使用的是用正则对象Pattern 和匹配器Matcher。
用法:
范例:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
步骤:
1,先将正则表达式编译成正则对象。使用的是Pattern类一个静态的方法。compile(regex);
2,让正则对象和要操作的字符串相关联,通过matcher方法完成,并返回匹配器对象。
3,通过匹配器对象的方法将正则模式作用到字符串上对字符串进行针对性的功能操作
匹配器要使用到的方法:
find();通知匹配器去匹配字符串。查到就返回true,反之返回false
group();获取符合规则的字符串
注意:使用group前一定要用find方法去匹配器查找符合规则的字符串,否则报错
例题:获取由3个字母组成的单词。
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo7 {
public static void main(String[] args) {
getDemo();
}
public static void getDemo()
{
String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!"; String reg = "\\b[a-z]{3}\\b";//"\b":单词边界匹配器,只是代表了单词的开始或者是接受部分,不匹配任何字符
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group());
}
}
}
Day 10:浅谈正则表达式的更多相关文章
- 浅谈正则表达式-PHP为例
第一次比较系统的学习正则表达式,本篇文章以PHP语言为例来学习. 基本概念 正则表达式=普通字符(如a-z)+分隔符(正斜线(/).hash符号(#) 以及取反符号(~))+特殊字符(称为元字符) 两 ...
- 浅谈Java正则表达式
正则表达式我们都知道,它定义了字符串的模式,可以用来搜索.编辑或处理文本.我们在某些特定场景中用起来是非常方便的.它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果.比如我想判断一个几 ...
- 浅谈JavaScript中的正则表达式(适用初学者观看)
浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈
toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...
- Linux的文本处理工具浅谈-awk sed grep
Linux的文本处理工具浅谈 awk 老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
随机推荐
- Linux 内核 编译模块
背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...
- zabbix java gateway配置实战案例
zabbix java gateway配置实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署tomcat服务 博主推荐阅读: CentOS: https://www. ...
- java 饮料换购
饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始 ...
- 宏碁发布两款全A平台笔记本:良心价
导读 8月3日消息,在全球数码互动娱乐盛会ChinaJoy上,宏碁推出全新两款全A平台笔记本——暗影骑士4 锐龙版酷冷游戏本和蜂鸟Swift3锐龙版金属轻薄本. 此次发布的宏碁暗影骑士4 锐龙版笔记本 ...
- 【转载】UnityWebRequest的初步使用及常用方法解析
文章来源:https://blog.csdn.net/qwe25878/article/details/85051911#_35 今天,来学习一下Unity新的网络请求方式UnityWebReques ...
- 吴裕雄--天生自然java开发常用类库学习笔记:StringBuffer
public class StringBufferDemo01{ public static void main(String args[]){ StringBuffer buf = new Stri ...
- P1004 成绩排名
转跳点:
- springcloud--ruul(路由网关)
Zuul的主要功能就是路由转发和过滤器 实例: 1:添加依赖pom.xml: <dependencies> <dependency> <groupId>org.sp ...
- SSM文件上传要点总结
文件的上传要点: 1.表单方面:enctype="multitype/form-data" 编码方式选择混编码 input 类型采用file 2.实体类一定要进行序列化,也就是im ...
- jenkins打包iOS 报错:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.
在执行ios 打包的时候,我们通过执行下面的指令来打包ipa: mkdir arch archive_path=arch/${app_name}.xcarchive workspace_name=HP ...