javaWeb正则表达式
对于web来说,字符串的处理特别重要,而正则表达式是对字符串处理的利器,在字符过滤,验证方面都能看到她的身影。
今天需要处理一段json字符串,在用String.replaceAll的过程中,遇到了正则表达式不会写的尴尬场景。所以还是简单地补补正则表达式的知识吧。
先从一个正则表达式的使用讲起。
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Test {
public static void main(String[] args) { //这个正则表达式表示匹配1254-8888888,125-6966356这样子的字符
String regex = "\\d{3,4}-\\d{7}"; //初始字符串
String str = "agdf/1254-8888888sssdf125-6966356";
String aft = str.replaceAll(regex, "替换");
System.out.println("repalceAll后==="+aft); Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
//m.find()为true则一直匹配下去
while(m.find()){
//因为正则表达式中没有()括号,所以捕获组数为0
System.out.println("捕获组数,m.groupCount==="+m.groupCount()); //m.group()相当于m.group(0),对应着groupCount,即直接匹配,不分组
System.out.println("m.group==="+m.group(0)); } } }
运行结果
repalceAll后===agdf/替换sssdf替换
m.group===1254-8888888
捕获组数,m.groupCount===0
m.group===125-6966356
捕获组数,m.groupCount===0
从那个正则表达式说起, String regex = "\\d{3,4}-\\d{7}";
"\\d"这个是java的转义,本来的正则应该是“\d”,表示的是匹配0到9的数字,应该也可以写成这样[0-9],没试过。
"\\d{3,4}"表示\d的个数有3到4个,即匹配123,3212,000这些数字,后面的“\\d{7}”同理,匹配8888888等字符。
至于分组这些,看下下面这个demo
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Test {
public static void main(String[] args) { //这个正则表达式表示匹配1254-8888888,125-6966356这样子的字符
String regex = "([a-zA-Z]+)(\\d{7})"; //初始字符串
String str = "AGdf12548888888sssdf1256966356"; Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
//m.find()为true则一直匹配下去
while(m.find()){
//因为正则表达式中没有()括号,所以捕获组数为0
System.out.println("捕获组数,m.groupCount==="+m.groupCount()); //m.group()相当于m.group(0),对应着groupCount,即直接匹配,不分组
System.out.println("m.group(0)==="+m.group(0));
//对应第一个括号([a-zA-Z]+)
System.out.println("m.group(1)==="+m.group(1));
//对应第二个括号(\\d{7})
System.out.println("m.group(2)==="+m.group(2)); System.out.println("=============我是换行符============"); } } }
运行结果
捕获组数,m.groupCount===2
m.group(0)===AGdf1254888
m.group(1)===AGdf
m.group(2)===1254888
=============我是换行符============
捕获组数,m.groupCount===2
m.group(0)===sssdf1256966
m.group(1)===sssdf
m.group(2)===1256966
=============我是换行符============
最后再附带下常用的正则表达式字符
字符的取值范围
1.[abc] : 表示可能是a,可能是b,也可能是c。
2.[^abc]: 表示不是a,b,c中的任意一个
3.[a-zA-Z]: 表示是英文字母
4.[0-9]:表示是数字 简洁的字符表示
.:匹配任意的字符
\d:表示数字
\D:表示非数字
\s:表示由空字符组成,[ \t\n\r\x\f]
\S:表示由非空字符组成,[^\s]
\w:表示字母、数字、下划线,[a-zA-Z0-9_]
\W:表示不是由字母、数字、下划线组成 数量表达式
1.?: 表示出现0次或1次
2.+: 表示出现1次或多次
3.*: 表示出现0次、1次或多次
4.{n}:表示出现n次
5.{n,m}:表示出现n~m次
6.{n,}:表示出现n次或n次以上 逻辑表达式
1.XY: 表示X后面跟着Y,这里X和Y分别是正则表达式的一部分
2.X|Y:表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f
3.(X):子表达式,将X看做是一个整体
javaWeb正则表达式的更多相关文章
- javaWeb核心技术第四篇之Javascript第二篇事件和正则表达式
- 事件 - 表单提交(掌握) "onsubmit" - 单击事件(掌握) "onclick" - 页面加载成功事件(掌握) "onload" ...
- (转)一个JavaWeb项目开发总结
原文地址:http://www.cnblogs.com/lzb1096101803/p/4907775.html 一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml-&g ...
- 传智博客(JavaWeb方面的所有知识)听课记录(经典)
一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...
- 李兴华JavaWeb开发笔记
李兴华JavaWeb开发笔记 1.Java语法-基础 环境变量-JAVA_HOME, PATH, ClassPath 变量名 作用 举例 JAVA_HOME 指向JDK目录 C:\Program Fi ...
- 一个JavaWeb项目开发总结
一.学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring ioc->log->代码 先了解项目数据库的表结构,这 ...
- 【Javaweb】笔面试题 ---(1)
Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...
- JavaWeb 学习之 JSTL
上一篇博文我们讲解了 MVC 小案例,案例中包含了基本的增.删.改.查,对这个案例的有兴趣的伙伴可以自己动手实践一下,去复习一下或者说是学点新的知识!如果有已经看过且实践过的伙伴相信对 JSP 页面中 ...
- java String正则表达式
1.正则表达式 字符串替换, 例子; String s="131hello334thrid ".replaceAll("[a-zA-Z]"," ...
- JavaWeb日常笔记
1. XML文档的作用和解析 1. XML的基本概述: XML的主要是用来存储一对多的数据,另外还可以用来当做配置文件存储数据.XML的表头如下: <?xml version='1.0' e ...
随机推荐
- python+selenium自动化软件测试(第15章):基础实战(2)
#coding:utf-8 #for windows/py2.7 from time import sleep from selenium import webdriver browser = web ...
- zoj3778 Talented Chef
As we all know, Coach Gao is a talented chef, because he is able to cook M dishes in the same time. ...
- Redis介绍和环境安装
-------------------Redis环境安装------------------- 1.安装 1.卸载软件 sudo apt-get remove redis-se ...
- FileDetector-基于java开发的照片整理工具
1. 项目背景 开发这个功能的主要原因如下: 1. 大学期间拍摄了约50G的照片,照片很多 2. 存放不规范,导致同一张照片出现在不同的文件夹内,可读性差,无法形成记忆线. 3. 重复存放过多,很多照 ...
- python程序之profile分析
操作系统 : CentOS7.3.1611_x64 python版本:2.7.5 问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程 ...
- .Netcore之日志组件Log4net、Nlog性能比较
转载请注明出处http://www.cnblogs.com/supernebula/p/7506993.html .Netcore之Log4net.Nlog性能比较 最近在写一个开源.netcore ...
- 关于mysql的Fetch Time 和 Duration Time
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt411 Stackowerflow 上关于这两个时间有人这样解释 Fetch ...
- Nhibernate学习教程(2)-- 第一个NHibernate程序
NHibernate之旅(2):第一个NHibernate程序 本节内容 开始使用NHibernate 1.获取NHibernate 2.建立数据库表 3.创建C#类库项目 4.设计Domain 4- ...
- 安装Window下Jenkins
之前没接触过持续集成工具,之前只是了解了下自动化部署,最近一直在看自动化集成这块,发现要学的东西好多好多,可能在小公司用的不多,但如果在大公司,如果每个项目都要手动build.deploy的话那也太耗 ...
- JavaSE(十)集合之Set
今天这一篇把之前没有搞懂的TreeSet中的比较搞得非常的清楚,也懂得了它的底层实现.希望博友提意见! 一.Set接口 1.1.Set集合概述 Set集合:它类似于一个罐子,程序可以依次把多个对象 “ ...