Java基础——正则表达式
一、什么是正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Uinx中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex、复数有regexps、regexes、regexen。
* 代表多个
?代表一个字符(可以有,可以无)
--图书编号 要么是5个数字,要么是5个数字加上 - 4 个数字,比如 12345 或 12345-0001

var r =new RegExp("\\d{5}"); 如果用要匹配 \ 怎么办? 要使用 \\\\ (四个)
var r=/\d{5}/;
==RegExp 对象的方法
var setr="高睿说: 我我..下棋....很.很....厉害";
//第一次,去掉所有的.
str=str.replace(/\./g,"");
//第二次,去掉重复的字
str=str.replace(/(.)\1/g, "$1");
//结果 : 高睿说: 我下棋很厉害
== 定位符
1) ^ 规定匹配必须发生在目标字符串的开头部分上,必须出现在最前面才有用
例如 ^o 与 ok中的 o 匹配,但于 dog 中的 o 不匹配,,如果设置了RegExp对象实例的
MultiLine 属性, ^ 还会与首行匹配, 即与 \n 或 \r 之后的位置匹配
2) $ 匹配目标字符串的结尾位置,必须出现在最后才有定位符的作用
例如 o$ 与 hello 中的 o 匹配 ,但与 ok 中的 o不匹配
3) \b 匹配一个字(也就是一个单词) 的边界,它包含了字与空格间的位置以及目标字符串的开始和结束等位置
例如 "er\b" 匹配 never ok 中的er ,但不匹配 verx 中的er
"\bis\b" 匹配 this is anicecat isisisdog 中的 is
4) \B \b的逆运算 ,结果与上例相反
//例子
调用 replace(/win/g,"close") 来替换 win a window ,得到 close a closedow
调用 repalce(/\bwin\b,"close"/) 得到 close a window
//例子
如果想在一段文本的内容中的每行前面都加上同一个标记文本,只需使用这个标记文本对
^ 做全局替换即可
var str= "aaa\nbbb\nccc";
alert( str.replace(/^/mg,"#")); 这里的m 指的是多行的意思
结果:
#aaa
#bbb
#ccc
== 附
---- 原义字符
一些元字符不在再表示它原来的字面意义,如果要匹配它们的字面意义,必须使用
\ 转义
需要进行转义的字符 $ ( * . [ ? \ / ^ { |
---- 优先级顺序
* 比字符优先级高,比如 ab* 是 b 和 * 组合后,再和前面的 a组合
()比 *优先级高,(ab)* 是a和b组合后,再和* 组合,字符比 | 优先级高,
a|bc 是 bc组合后,再和 a 组合
一些正则表达式模式范例
匹配空行 /^\s*$/
匹配HTML标记 /<(\S+)(\s[^>]*)?>[\s\S]*<\/\1\s*>/
匹配email /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
匹配两个相同相邻的单词 /\b([a-z]+)\1\b/ //例如 CatCat
匹配 ip 地址 /^\d{1,2}|1\d\d|2[0-4]\d|25[0-5](\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/
\u4e00-\u9fa5 表示中文
四、java 中使用正则表达式验证
//例一 验证手号码
public static boolean checkPhone(String str){
boolean result=true; if(str.length()!=11){
result=false;
System.out.println("号码长度不正确");
}
if(!str.startsWith("1")){
result=false;
System.out.println("不是以1开头的");
} char [] arr=str.toCharArray();
for(int i=0;i<arr.length;i++){
if(!(arr[i]>='0'&&arr[i]<='9')){
result=false;
System.out.println("含有非法字符");
break;
}
}
return result;
}
//例二
public static boolean checkPhone2(String str){
boolean result=true;
try{
Long.parseLong(str);
}
catch(Exception ex){
System.out.println("手机号格式不正确");
result=false;
}
return result;
}
// 例三
public static boolean checkPhone3(String str){
String regex="1[3584]\\d{9}";
return str.matches(regex);
}
//例四 使用正则表达式进行切割
public static void splitDemo1(){
String str="aaa---bbb-------ccc----ddd";
String [] strList=str.split("-+");
System.out.println(strList.length);
for(String s:strList){
System.out.println(s);
}
}
//例五
public static void splitDemo2(){
String str="aaa.bbb.ccc.ddd";
String [] strList=str.split("\\.");
System.out.println(strList.length);
for(String s:strList){
System.out.println(s);
}
}
//例六
public static void splitDemo3(){
String str="c:\\windows\\system32\\aa.bmp";
String [] strList=str.split("\\\\");
System.out.println(strList.length);
for(String s:strList){
System.out.println(s);
}
}
//例七 替换
public static void replaceDemo(){
String str="要1234想办456假证,请联系13503688749或13302564798 或者是 15050020120 或者 257";
String regex="\\d{11}";
System.out.println(str.replaceAll(regex, "混球"));
}
//例八 获取
public static void getDemo(){
String str="林花谢了春红大葱葱,太匆匆,好大大葱大葱葱大葱葱葱";
String regex="大葱葱+"; Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(str); while(matcher.find()){
System.out.println(matcher.group());
}
}
//例九 从网页上获取
public static void webGetDemo()throws Exception {
URL url=new URL("http://localhost:8080/book-shop/login.jsp");
URLConnection conn=url.openConnection(); BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); String regex="[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+";
Pattern pattern =Pattern.compile(regex); String str=null;
while((str=br.readLine())!=null){
Matcher matcher=pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
}
}
Java基础——正则表达式的更多相关文章
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- JAVA基础--正则表达式
. any character \d A digit 0-9 \D a non-digit [^0-9] \s a whitespace character, 空白字符 \S a non-w ...
- Java基础--正则表达式的规则
注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...
- 二十八、Java基础--------正则表达式
在对字符串进行处理时一方面可以利用String对象的一些处理方法另一方面可以利用正则表达式,但是一般情况下用String对象方法进行处理起来会相对麻烦一些而正则表达式可以很方便的解决问题.为了更好的学 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- 黑马程序员:Java基础总结----正则表达式
黑马程序员:Java基础总结 正则表达式 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import java.util.regex.*; 符合一定规 ...
- Java基础七-正则表达式
Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...
- Java基础学习总结(35)——Java正则表达式详解
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- Java基础 -- 字符串(格式化输出、正则表达式)
一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...
随机推荐
- HAProxy出现"远程主机强迫关闭了一个现有的连接 " 的错误及解决
使用haproxy作为sql server 的负载均衡器. 使用了文档中的示例配置项: timeout client 50s timeout server 50s 采用这个配置项,有时会 ...
- 项目中使用同一dll的不同版本
在一个项目中,因为使用了一些插件,这些插件使用了不同版本的log4net,有1.2版本,有2.0版本的.当运行的时候发生冲突. 解决办法:在config中加入如下的配置 <dependentAs ...
- 如何修改config?
这几天在做给WCF做加密传输,结果当然是实现了加密传输,同时也发现了一个问题,有没有大神来答疑解惑一下. 事情是这样的. 在客户端的配置中,需要加入一个behavior,在config文件中是这样的. ...
- Redis 学习笔记(十二)Redis 复制功能详解 ----- (error) READONLY You can't write against a read only slave
Redis 复制(Replication)1. 复制介绍分布式数据库为了获取更大的存储容量和更高的并发访问量,会将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上.Redis为了解决 ...
- Vue 父组件ajax异步更新数据,子组件props获取不到
转载 https://blog.csdn.net/d295968572/article/details/80810349 当父组件 axjos 获取数据,子组件使用 props 接收数据时,执行 mo ...
- 9.indicate、xutils、json
json数据 页签详情页数据 public class TabData { public int retcode; public TabDetail data;//不是数组的话类型就是这个 pu ...
- 第十节:详细讲解一下Java多线程,随机文件
前言 大家好,给大家带来第十节:详细讲解一下Java多线程,随机文件的概述,希望你们喜欢 多线程的概念 线程的生命周期 多线程程序的设计 多线程的概念 多线程的概念:程序是静态的,进程是动态的.多进程 ...
- HttpWebRequst中https的验证处理问题
最近在公司项目中使用了HttpWebRequst相关API,运行环境为.Net/Mono 2.0,是一款针对Unity平台的工具.开发过程中碰到了大家可能都碰到过的问题,Http还是Https? 为什 ...
- OC学习3——C语言特性之指针
1.指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量.自定义类的变量等都是指针.定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量.注意: ...
- Redis最新面试题26题(初级、中级Redis面试题)
Redis 1级(入门基础) 1.Redis有哪些数据类型? string,list,set,sorted set(Zset),hash 2.集合和列表有什么区别? 列表是可以从两端推入.推出数据的队 ...