目录

  • 正则表达式

    • 基础语法

      • 标准字符集合
      • 自定义的字符集合
      • 多行、单行模式
    • 高级语法
      • 选择符和分组
      • 反向引用
      • 预搜索/零宽断言
    • 例子
      • 匹配邮箱

正则表达式

基础语法

标准字符集合

\D 和[^\d]意思一样,就是与 \d 相反

REG 意义
\ddigital 表示 0 到 9 之间任意的一个数字
\wworld 表示任意一个字母或数字或下划线,不包含¥$%等
\sspace 表示包括空格、制表符、换行符等空白字符中任意一个
. 可以匹配任意一个字符

自定义的字符集合

REG 意义
[ad# ]方括号 表示匹配 a 或 d 或 # 或 空格
^[ad# ] 表示除方括号以外的字符
[a-g] 表示匹配 a 到 g 之间的字符,别和上面的混淆了
[^a-f,0-3] 匹配除了 a - f 和 0 到 3以外的字符

匹配次数

REG 意义
(\d){10} 前面的规则重复匹配了10次
{n,m} 表示至少重复n次,最多重复m次
{n,} 至少n次
? 同{0,1}
+ 同{1,}
* 同{0,}

多行、单行模式

  1. 忽略大小写:ignorecase
  2. 单行模式:single line 整个串作为一个模板串
  3. 多行模式:multi line 模板串分为多个行

    字符边界/匹配位置

    REG 意义
    ^ 与字符串开始的地方匹配
    $ 与字符串结束的地方匹配
    \b 表示在边界处匹配字符,放在左右会不一样的结果

高级语法

选择符和分组

REG 意思
\| 表示‘或’的意思,匹配左边或右边
() 对正则表达式分组,更好地组织匹配
(?:Expression) 不把()组中匹配到的字符不保存到group中

反向引用

\nnn反向引用|把捕获的字符分组编号,左括号为一个分组

预搜索/零宽断言

也是匹配位置

很少用的

REG 意义
(\w)(?=Expression) 匹配以Expression匹配到的字符结尾的字符
(\w)(?!Expression) 匹配不能以Expression匹配到的字符结尾的字符
(\w)(?<=Expression) 位置前面可以匹配Expression
(\w)(?<!Expression) 位置后面可以Expression

表达式 方向 说明
|GEG|意义|
|:----|----:|----:|
|(?=xxx)|正向预搜索(向右) 正向预搜索,判断当前位置右侧是否能匹配指定表达式 |
|(?!xxx) | 正向预搜索(向右) 正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式 |
|(?<=xxx)| 反向预搜索,反向预搜索,判断当前位置左侧是否能够匹配指定表达式|

例子

匹配邮箱


要考虑的问题:

  1. 把@前面的给匹配了:(\w+)
  2. 匹配“.”:. (因为“.”表示任意字符,所以要转义一下才能匹配到“.”)
  3. 把@后面的域名给匹配了,要考虑多层域名的匹配
  4. 用户名和域名中的大小写
  5. 用户名中含有 “.”
  6. 并不允许用户名中出现”-“

第一版
没能匹配到用户名中有 ”.“的邮箱
(\w+)@(\w+)(\.[a-zA-Z]{2,5}){1,2}

2989389@qq.com
adfj32KddkfKJAD@163.com
ajdf23AKDJFO@yahoo.com.cn
akdjf239290@guet.org
KFADJSFOAJDSFOAEJ@GUET.EDU.CN

最终版


![](https://images0.cnblogs.com/blog/582013/201312/23170854-ccd9c8305e1d43e998a0240d67cdc1f2.jpg)
这个可以匹配用户名含有“.“的邮箱

package regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchMail {
public static void main(String[] args) {

    //正则表达式Pattern p = Pattern.compile("(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})");//待匹配的字符串String str = "2989389@qq.com"+ "adfj32KddkfKJAD@163.com"+ "ajdf23AKDJFO@yahoo.com.cn"+ "akdjf239290@guet.org"+ "KFADJSFOAJDSFOAEJ@GUET.EDU.CN"+"23jka32ir.323dfj@qq.com"+"23rfasdf.com.@163.qq.com";//用正则表达式去匹配字符串Matcher m = p.matcher(str);int i = 0;//如果发现,m.find()则为truewhile(m.find()){//每一组匹配到的字符都被放到了group里System.out.println(m.group(0));i++;}System.out.println(i);
}

}


###中文字符###
**[\u4e00-\u9fa5]**
***###用正则表达式取出正则表达式中括号里的数据
![](http://images2015.cnblogs.com/blog/640685/201509/640685-20150901151130888-1768887603.png)

package atest;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Aa {
public static void main(String args[]) throws Exception {
// 用正则表达式把字符串中的浮点数提取出来
// "\d[.]\d" 不能处理 .t3
// “\(.*?\)” 也是可以的
Pattern p = Pattern.compile("[\d]+\.[\d]+");
String u = "Mv(2.50),Tl(3.25),3.t3,3.,3..,Tr(3.26),Bk(2.16)";
Matcher m = p.matcher(u);

    // 统计有多少个浮点数int i = 0;while (m.find()) {System.out.println(m.group());i++;}System.out.println(i);
}

}

###匹配IP地址###
> 1. 匹配:三个字符一个点 三个字符一个点 三个字符一个点 三个字符
> 2. IP地址<255
> 3. IP地址的数字不能以0开始,如:012.* 第一版:
```
((\d{1,3})\.){3}\d{1,3}
```
把562.264.351也匹配了,没能确定IP地址<255* 第二版(最终版)
```
(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
```
```/ ***    最简洁的IP判断正则表达式*  25[0-5]                     250-255*  2[0-4]\d                    200-249*  [01]?\d\d?                 000-199(0-9 \d)(10-99 \d\d)(100-99 1\d\d)*  ($|(?!\.$)\.)               结束 或者 不以.结束的加上.*  (?!^0{1,3}(\.0{1,3}){3}$)     排除 0.0.0.0 /^(?!^0{1,3}(\.0{1,3}){3}$)((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$/*  (?!^255(\.255){3}$)           排除 255.255.255.255*/
```###电话、手机号码##
> 固定电话7位数,包含0开头和”—”
> 移动电话11位数,以13或15开头```
(0\d{2,3}-\d{7,9})|(1[35]\d{9})
```
![](http://images2015.cnblogs.com/blog/640685/201509/640685-20150901221837544-1968355426.png)

package regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestCode {
public static void main(String[] args) {
Pattern p = Pattern.compile("(0\d{2,3}-\d{7,9})|(1[35]\d{9})");
String str = "15907877344"
+ "0774-1593849"
+ "13877477862"
+ "1555615951"
+ "6651651565151"
+ "13515a1dfa91w13"
+ "434$tfsf51asf51"
+ "8E94 WE8";
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group(0));
}
}
}

````

所用到的工具是RegexBuddy

转载于:https://www.cnblogs.com/tianjintou/p/4695953.html

作为程序员之正则表达式相关推荐

  1. 黑马程序员--JavaJAVA 正则表达式 (超详细)

    -------android培训.java培训.期待与您交流! ---------- 在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用jav ...

  2. 黑马程序员——Java正则表达式

    正则表达式 两类:Pattern模式类和Matcher匹配类                Pattern主要是用来编译模型和生成匹配器matcher: 正则表达式基本方法               ...

  3. 黑马程序员——11 正则表达式

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式 一.概念 符合一定规则的表达式,用于专门操作字符串,可以简化对字符串的复杂操作,主要 ...

  4. 程序员必备网站之一:i Hate Regex

    公众号关注 "GitCube" 设为 "星标",带你挖掘更多开发神器! 大家好,我是小 G. 作为一名程序员,正则表达式可谓是我们必须掌握的技术之一,特别是在进 ...

  5. 好程序员web前端分享使用JavaScript正则表达式如何去掉双引号

    为什么80%的码农都做不了架构师?>>>    好程序员web前端分享使用JavaScript正则表达式如何去掉双引号,最近接了一个项目,项目需求需要用js正则表达式过滤掉页面文本域 ...

  6. 理解正则表达式(程序员第3期文章)

    本文为<程序员>07年3月号<七种武器>专题所做.有兴趣的读者可以到 这里  来投一票,表达您对于程序员基本功的看法. 在程序员日常工作中,数据处理占据了相当的比重.而在所有的 ...

  7. 正则表达式笔试题php,2017年初级PHP程序员笔试题

    2017年初级PHP程序员笔试题 6.实现一个字符串截取的函数,类似于substr,必须能够截取中文这种多字节编码.假设每个中文也是一个字符,普通的数字.符号.字母也是一个字 符.(提示:GB编码的中 ...

  8. 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

    此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...

  9. 好程序员分享使用JavaScript正则表达式如何去掉双引号

    好程序员分享使用JavaScript正则表达式如何去掉双引号最近接了一个项目,项目需求需要用js正则表达式过滤掉页面文本域中值得双引号,其实解决办法很简单,下面把我写的代码分享给大家,有同样需求的朋友 ...

最新文章

  1. c语言插入排序算法伪代码,排序算法——插入排序(C语言实现)
  2. 关于.h .lib .dll的总结
  3. IT项目之旅(二)篮球计分器(分析、设计、实现)
  4. php ssc 源码_吃透这篇,你也能搭建出一个高并发和高性能的系统
  5. vmware安装minimal centos报错/etc/rc5.d/s99local : line
  6. mysql提取各种数据时间的各种方法
  7. 海尔智能微型计算机,微型计算机 Microcomputers
  8. 带通滤波器作用和用途_常见低通、高通、带通三种滤波器的工作原理
  9. Moss网站在不同服务器的迁移
  10. 程序员,30岁前最好都找大厂,好好做技术
  11. 用Python怎样实现Excel中的公式向下填充?
  12. 自己动手画一个CPU——Logisim,下
  13. Maven – 父子 POM 示例
  14. GIS应用技巧之景观格局指数
  15. 计算机金钱符号怎么打,€欧元符号怎么打出来?各种输入欧元的货币符号方法!...
  16. 苹果手机上网很慢_别再重启iPhone了!信号不好,这样设置让手机网速如飞
  17. C++实现黑白棋算法
  18. OFFICES当出现“向程序发送命令时出现问题”错误怎么解决
  19. springsecurity记住我
  20. DB2的HADR的搭建

热门文章

  1. 【算法竞赛学习】金融风控之贷款违约预测-数据分析
  2. 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图
  3. KMP算法理解(转)
  4. 如何设计一个合适的系统电源
  5. 邮件伪造_伪造品背后的数学
  6. linux loop device
  7. 谈谈 Android 中的 PathClassLoader 和 DexClassLoader
  8. 银行真的已经是夕阳行业了吗?
  9. 基础002_V7-CLB
  10. 基于DM642的X264开源代码实现的研究