基于java的正则表达式

正则表达式概念

正则表达式,又称正规表示法、常规表示法(英语: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
}
}

时间: 2024-10-16 22:20:29

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

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

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

基于Java的数据采集(二)

在上一篇文章<基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html 提到了如何如何读取网页源代码,并通过group正则 动态抓取我们所需要的网页数据 现在来写下关于数据的存储,思路很简单,只需要在我们每次读取一个数据的时候,把数据存放在临时变量,然后插入数据库即可. 先来建一个表: DoMysql.java(数据库连接类,并提供插入数据的方法) 1 package com.lcw.curl; 2 3 4 import j

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

简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA代码,实现一个支持常用功能的正则表达式引擎.它支持贪婪匹配和懒惰匹配:支持零宽度字符(如"\b", "\B"):支持常用字符集(如"\d", "\s"等):支持自定义字符集("[a-f]","[^b-

基于Java的数据采集(三)

<基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html <基于Java的数据采集(二)>:http://www.cnblogs.com/lichenwei/p/3905370.html 基于之前2篇Java数据采集入库,做了下功能整合,实现本地的存读取,上个效果图: 直接上代码吧,本程序只是作为"如何用JAVA抓取页面简单采集入库"的入门,在实际做采集工具的时候,还需考虑许多东西,比如当采

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

原文地址http://blog.csdn.net/qy20115549/article/details/52203722 本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平台. 目录 网络爬虫框架 网络爬虫的逻辑顺序 网络爬虫实例教学 model main util parse db 再看main方法 爬虫效果展示 网络爬虫框架 写网络爬虫,一个要有一个逻辑顺序.本文主要讲解我自己经常使用的一个顺序,并且本人经常使用这个框架来写一些简单的爬虫,复杂的爬虫,也是在这个基

9个基于Java的搜索引擎

1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Lucene为开发人员提供了相当完整的工具包,可以非常方便地实现强大的全文检索功能.下面有几款搜索引擎框架也是基于Lucene实现的. 官方网站:http://lucene.apache.org/ 2.开源Java搜索引擎Nutch Nutch 是一个开源Java实现的搜索引擎.它提供了我们运行自己的搜索

SimpleReact: 基于Java 8简单的FRP Fluent API

SimpleReact来自AOL的一个小型的支持并发的库包,其直接基于Java 8的CompletableFuture, JDK函数接口和Streams API构建,它的Fluent API能够提供解决90%的Reactive使用场景,重要的是没有带入任何复杂性.可以实现Functional Reactive Programming范式(简称:FRP,函数式响应编程) 使用SimpleReact能够方便扩展微服务,它能用于管理微服务的远程调用,能够应付高并发大型高性能平台的要求. 使用Simpl

这里整理了基于java平台的常用资源

这里整理了基于java平台的常用资源 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.thanks. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化的方式进行配置,所以维护起来相当困难. Gradle:Gradle采用增量构建.Gra

java常用正则表达式

java常用正则表达式 1.^\d+$ //匹配非负整数(正整数 + 0) 2.^[0-9]*[1-9][0-9]*$ //匹配正整数 3.^((-\d+) ?(0+))$ //匹配非正整数(负整数 + 0) 4.^-[0-9]*[1-9][0-9]*$ //匹配负整数 5.^-?\d+$ //匹配整数 6.^\d+(\.\d+)?$ //匹配非负浮点数(正浮点数 + 0) 7.^(([0-9]+\.[0-9]*[1-9][0-9]*) ?([0-9]*[1-9][0-9]*\.[0-9]+)