Java正则表达式,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.

判断用户的输入是否符合实际需求。

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

1.字符类([]只能表示一个字符,不能表示多个,如[ab]表示ab中的一个而不是表示连起来的ab)

. 任意一个字符

[abc] a、b、c中的任意一个

[^abc] a、b、c之外的任意字符

[a-zA-Z] a到z或A到Z中的任意一个字符

[abc[hij]] 相当于[abchij]

[a-z&&[hij]] a-z与hij的交,hij中的一个

\s 空白(空格,tab,换行,换页,回车)

\S 非空白([^\s])

\d  数字0-9

\D 非数字[^0-9]

\w  词字符[a-zA-Z0-9]

\W 非词字符[^\w]

2.逻辑操作符

XY Y在X后面

X|Y X或Y

(X) 组,可以用group(int group)方法来获得相应的组,组号为0表示整个表达式,组号为1表示第一队括起来的组,依此类推

3.量词

? 0个或1个

+ 至少一个

* 0个或多个

X{n} 恰好n个X

X{n,} 至少n个X

X{n,m} n到m个X

4.匹配模式

有三种匹配模式:

(1)贪婪型

默认都是贪婪的,比如有字符串abcabc,当使用正则表达式(.*c)时只能匹配到abcabc,而不是abc

(2)勉强型

用?表示,加在量词后面。对于字符串abcabc,使用正则表达式(.*?c),?表示勉强型,表示匹配满足模式所需的最少字符,可以匹配到两个abc

(3)占有型

只在java中能用,防止回溯,用+表示,加在量词后面

5.用法

java中编写正则表达式要注意转义

(1)直接使用String类的matches()方法,效率较低

(2)先用Pattern.compile()方法编译正则表达式

Pattern p = Pattern.compile(regex)

接下来使用Pattern对象的matcher()方法,生成一个Matcher对象

Matcher m = p.matcher(input),input为字符串,可以为"",使用""可以为循环提供一定的性能优化,可以在创建Matcher对象后用reset()重置字符串

  1. public static void main(String[] args) {
  2. // 要验证的字符串
  3. String str = "service@xsoftlab.net";
  4. // 邮箱验证规则
  5. String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}";
  6. // 编译正则表达式
  7.     Pattern pattern = Pattern.compile(regEx);  
  8.     // 忽略大小写的写法  
  9.     // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);  
  10.     Matcher matcher = pattern.matcher(str);  
  11.     // 字符串是否与正则表达式相匹配  
  12.     boolean rs = matcher.matches();  
  13. System.out.println(rs);
  14. }

(3)matcher.find()可用来查找多个匹配,如可用

while(m.find()){

System.out.print(m.group());

}

来查找所有匹配的字符串。

matcher.find(i)表示从位置i开始匹配

实例:

 20 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
21 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

常用正则表达式

规则 正则表达式语法
一个或多个汉字 ^[\u0391-\uFFE5]+$
邮政编码 ^[1-9]\d{5}$
QQ号码 ^[1-9]\d{4,10}$
邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$
用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$
手机号码 ^1[3|4|5|8][0-9]\d{8}$
URL ^((http|https)://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
18位身份证号 ^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$

转义字符:

特别字符

说明

$          匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。

( )         标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 和和。

*           匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

+          匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

.           匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。

[ ]         标记一个中括号表达式的开始。要匹配 [,请使用 \[。

?          匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。

\           将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。

^         匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。

{ }       标记限定符表达式的开始。要匹配 {,请使用 \{。

|          指明两项之间的一个选择。要匹配 |,请使用 \|。

Java正则表达式的总结的更多相关文章

  1. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  2. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  3. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  4. 【转】详解Java正则表达式语法

    (转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...

  5. java正则表达式【大全】

    [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

  10. Java正则表达式实用教程

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...

随机推荐

  1. Linux下计划任务以及crontab权限问题

    在Linux工作环境下,我们有时可能会需要在未来某个时间执行某个命令或脚本,但是我们又不可能定个闹钟,然后到点了再去执行吧,这多麻烦.还好我们的Linux系统这么强大,提供了任务计划这个功能,我们就不 ...

  2. 非常好的一个CentOS 6.2 apache 2.4.2 编译教程

    除了以下2点,没有错的. 1)pcre-devel 需要安装 2)apr 和 apr-util 有了新的版本了 How to Install Apache 2.4.2 from Source on C ...

  3. toad 快捷键大全

    现在在企业中,操作oracle数据库的客户端,除了PL/SQL外,使用的较多的就是TOAD了!toad记得F9执行全部sql和Ctrl + Enter执行选中sql就行了,有啥需要的再查吧.快捷设置在 ...

  4. Google Bazel简介

    最近跑一个代码,需要用到Bazel. Bazel

  5. windows/browser ----> cmd命令/powershell命令/chrome插件vimuim命令

    windows 7 cmd常用命令: 1.进入某盘,比如d盘:d:(有一个冒号) 2.显示d盘的文件夹和文件:dir 3.进入d盘某个文件夹:cd filename 4.清除屏幕:cls 5.查看ip ...

  6. 腾讯tOS死亡或注定,为何国内无自主ROM?

    http://tech.sina.com.cn/roll/2017-06-26/doc-ifyhmtrw4006354.shtml 腾讯OS死亡或注定,为何国内无自主ROM? 2017年06月26日 ...

  7. re正则表达式方法

    目录 1.python正则匹配 1.1 re.search 正则表达式 1.2 re.match() 正则表达式 1.3 re.match与re.search的区别 1.4 检索和替换 1.5 正则表 ...

  8. 启动adb devices,报adb已停止工作

    1.winddows下,一般是由于adb默认的”5037“被其他应用占用导致的(手机助手或者360居多) 2.cmd 下 netstat -ano |find "5037"查找占用 ...

  9. antd-mobile的DatePicker日期选择组件使用

    现在项目上有个需求,在时间选择上需要精确到分钟,且分钟只能是0分钟或者是30分钟. 使用了antd-mobile的DatePicker组件,具体用法可参考:https://mobile.ant.des ...

  10. oracle中给表和列起别名

    SELECT xxmc,sname as xsxm,sex,phone,address jzdz FROM student s LEFT JOIN xxjbxx x ON x.sid = s.sid ...