正则表达式概念

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。正则表过式用于操作字符串数据。
String类里有一个方法
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。

参数:
regex - 用来匹配此字符串的正则表达式

返回:
当且仅当此字符串匹配给定的正则表达式时,返回 true
符号简介:

\\匹配反斜线字符

\r匹配回车符
\t匹配制表符
\f匹配换页符

\n匹配换行符
[abc]匹配abc中的一个

[^abc]匹配除了abc中的一个

[a-z]匹配指定范围内的任意一个字符,例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[A-Z]匹配指定范围内的任意一个字符,例如,“[A-Z]”可以匹配“A”到“Z”范围内的任意大写字母字符。

[a-d[m-p]] 匹配[a-d m-p]并集 //abcd mnop中的一个
[a-z&&[^bc]]匹配[ad-z]范围内的任意字符//取a-z中的任意但不能取bc

[a-z&&[^m-p]]匹配[a-l q-z]范围内的任意字符//取a-z中的任意但不能取mnop

[a-z&&[def]]匹配def交集中的任意字符
. 匹配除“\r\n”之外的任何单个字符

\d 匹配一个数字字符。等价于[0-9]
\D 匹配一个非数字字符。等价于[^0-9]

\s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]

\S 匹配任何可见字符。等价于[^\f\n\r\t\v]

\w 匹配单词字符:等价于[a-zA-Z_0-9]
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
^ 匹配输入字符串的开始位置

$ 匹配输入字符串的结束位置
\b 匹配一个单词边界

\B 匹配非单词边界

? 匹配一次或一次没有

* 匹配0次或多次

+ 匹配1次或多次
{n} 匹配恰好n次

{n,} 匹配至少n次

{n,m} 匹配至少n次,但不能超过m次匹配
\1 后向引用,表示表达式中,从左往右数,第一个左括号对应的括号内的内容。以此类推,\2表示第二个,\0表示整个表达式
使用String类中的matches方法
例子:匹配手机号码是否正确
public class RegDemo{

public static void main(String[] args) {

String tel="13800001111";

String reg="1[358]\\d{9}"; //1[358][0-9]{9}

boolean b=tel.matches(reg);

System.out.println(tel+":"+b);

}

}
切割:使用String类中的split方法例子:
切割字符串
public class RegDemo{

public static void main(String[] args) {

String str1="wang_yu_hang";
String str2="zhao fei ";

String str3="tang.chun.lai";
String [ ] strarr1=str1.split("_");
String [ ] strarr2=str2.split(" +");
String [ ] strarr3=str3.split("\\.");
for(String str:strarr1){

System.out.println(str);
}
}

}
替换:使用String类中的replaceAll方法例子:替换字符串
public class RegDemo{
public static void main(String[] args) {
String str="helloworld";
str=str.replaceAll("o","xx");
System.out.println(str);
String ss = "tel12344556qq4564654add4646767";
ss= ss.replaceAll("\\d{4,}", "#"); //4个或4个以上的数字连在一起的换成#
System.out.println(ss);
}
}
叠词替换:想要替换重复出现的单词,例如aa bbb cccc 任何的单词都有可能重复,所以使用 .(点)匹配任意字符.然后使用() 括号将该单词封装到组中. 为了重复使用某些规则就将规则封装为了组.使用()\1 1 是组号,\1引用了组.就是组中是什么这个位置也是什么.取值时,使用$1取第一个括号(组)中的值,以此类推。

获取:
其实使用的是java.util.regex.Pattern 类;
java.util.regex.Matcher 类
Matcher类中的常用方法

public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。

public String group() 返回由以前匹配操作所匹配的输入子序列。

public int start() 返回以前匹配的初始索引。

public int end() 返回最后匹配字符之后的偏移量。
例子:获取字符串
public class RegDemo{
public static void main(String[] args){

Pattern p = Pattern.compile(“a*b”); //将正则表达式进行对象封装
Matcher m = p.matcher(“aaaaab”);//用正则表达式的方法matcher和字符串关联,获取对字符串操作的匹配对象
Matcher
boolean b = m.matches();//通过Mather匹配器对象的方法对字符串进行操作

System.out.println(b); //匹配返回true,不匹配则返回false
}
}

基于java的正则表达式的更多相关文章

  1. 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用

    简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...

  2. 基于Java的数据采集(一)

    之前写过2篇关于PHP数据采集入库的文章: 基于PHP数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3872307.html 基于PHP数据采集入库(二): ...

  3. 基于Java的数据采集(二)

    在上一篇文章<基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html 提到了如何如何读取网页源代码,并通过group ...

  4. 基于Java的数据采集(三)

    <基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html <基于Java的数据采集(二)>:http:/ ...

  5. 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)

    原文地址http://blog.csdn.net/qy20115549/article/details/52203722 本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平 ...

  6. 基于Java实现简单亚马逊爬虫

    前言:最近博主买了台Kindle,感觉亚马逊上的图书资源质量挺好,还时不时地会有价格低但质量高的书出售,但限于亚马逊并没有很好的优惠提醒功能,自己天天盯着又很累.于是,我自己写了一个基于Java的亚马 ...

  7. 自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

  8. 9个基于Java的搜索引擎框架

    在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...

  9. 基于java平台的常用资源整理

    这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.t ...

随机推荐

  1. iOS 任务的依赖操作

    -(void)dependency{ /** 假设有A.B~C三个操作,要求: 1. 3个操作都异步执行 2. 操作C依赖于操作B 3. 操作B依赖于操作A */ //创建一个队列 NSOperati ...

  2. GNU/Linux与开源文化的那些人和事

     一.计算机的发明 世上本无路,走的人多了,就有了路.世上本无计算机,琢磨的人多了--没有计算机,一切无从谈起. 三个人对计算机的发明功不可没,居功至伟.阿兰·图灵(Alan Mathison Tur ...

  3. NPM使用技巧

    如果你是一个JavaScript系的开发者,一定不会陌生NPM,它既是一个平台,也是一个工具.在这个平台上,我们能够使用其他开发者提供的功能代码,当然我们也能将我们自己代码提交到这里分享给世界上的开发 ...

  4. JavaScript 简易版 自动轮播 手动轮播 菜鸟交流

    本人刚刚接触前端,许多知识还不了解,以前经常到博客园查询自己需要的东西,现在也终于反客为主了.作为新手,所展示的东西也是浅显易懂,希望同是新手的伙伴们共同交流.共同进步,若是成功捕获一位大大,也请您赐 ...

  5. CSS3实现一束光划过图片、和文字特效

    在打折图标里面 实现一道白光划过的动画效果 css: <!DOCTYPE html><html><head><meta charset="utf-8 ...

  6. SpringMVC文件上传下载

    不多说,代码: Spring-config.xml<!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件, 如果扫描到有Spring的相关注解的类,则把这些类注 ...

  7. 细谈UITabBarController

    1.简述 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,UITabB ...

  8. Ubuntu下安装Tomcat7

    第一部分:基本安装 1.打开http://tomcat.apache.org/download-70.cgi,下载apache-tomcat-7.0.68.zip. 2.拷贝至合适位置,如/usr/l ...

  9. iOS WebView你需要的问题答案

    一.UIWebView 可以加载和显示某个URL的网页,也可以显示基于HTML的本地网页或部分网页: a. 加载 URL WebView = [[UIWebView alloc] initWithFr ...

  10. 【转】JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)

    转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...