java中正则匹配字符串长度_Java中使用正则表达式校验字符串
Java中使用正则表达式校验字符串
正则表达式是某一位伟大的数学家发明的,现在已经形成了一个ISO标准,这个标准和编程语言没有关系。至于具体谁发明的,怎么发明的,我也忘记了:)。
正则表达式简单理解就是用来匹配字符串,看看所给字符串是否与正则表达式匹配,通过匹配关系,可以做很多事情,比如搜索引擎、替换、校验、分割等等。但最基本的还是用来校验匹配关系。 Java SE中早已实现了正则表达式的引擎,并且有着广泛的应用。
参考JDK API文档,Java的正则表达式API集中在java.util.regex包里面,其下有两个核心类:
软件包 java.util.regex
用于匹配字符序列与正则表达式指定模式的类。
接口摘要
MatchResult 匹配操作的结果。
类摘要
Matcher 通过解释 Pattern 对 字符序列 执行匹配操作的引擎。
Pattern 正则表达式的编译表示形式。
异常摘要
PatternSyntaxException 抛出未经检查的异常,表明正则表达式模式中的语法错误。
具体功能很多,用法也很灵活,现在给出一个例子,用来校验一个字符串:
这个字符串必须符合如下格式:
1、第一个字母为R,后跟两个数字,然后是一个下划线,后面再跟两个字母,两个数字;还有可以跟一个下划线带两个数字。
2、十一个数字。
3、年度:四个数字,首位必须为1或者2。
4、月份:01~12
以上四个部分之间用横杠连接。
例如,一下是格式良好的字符串
R05_QD01-34010000000-2007-12
R23_QD21_02-34010000000-2007-01
下面给出个例子看看:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
* Created by IntelliJ IDEA.
* File: RegExDemo.java
* User: leizhimin
* Date: 2008-3-10 15:55:24
*/
public class RegExDemo {
private static String regEx1 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-0[1-9]";
private static String regEx2 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-1[012]";
private static String regEx3 = "R\\d{2}_[A-Z]{2}\\d{2}(_\\d{2})?-\\d{11}-[1|2]\\d{3}-[NABCXQD]";
/**
* 验证报表代码是否符合编码规则
*
* @param rptCode 报表代码
* @return 验证结果,验证通过返回true,失败返回false
*/
public static boolean isRegularRptCode(String rptCode) {
Pattern p1 = Pattern.compile(regEx1);
Pattern p2 = Pattern.compile(regEx2);
Pattern p3 = Pattern.compile(regEx3);
Matcher m1 = p1.matcher(rptCode);
Matcher m2 = p2.matcher(rptCode);
Matcher m3 = p3.matcher(rptCode);
boolean rs1 = m1.matches();
boolean rs2 = m2.matches();
boolean rs3 = m3.matches();
return rs1 || rs2 || rs3;
}
public static void main(String args[]) {
String s1 = "R05_QD01-34010000000-2007-12";
boolean flag1 = isRegularRptCode(s1);
System.out.println("字符串 " + s1 + " 验证" + (flag1 ? "成功!" : "失败!"));
String s2 = "R23_QD21_02-34010000000-2007-01";
boolean flag2 = isRegularRptCode(s2);
System.out.println("字符串 " + s2 + " 验证" + (flag2 ? "成功!" : "失败!"));
}
}
运行结果:
字符串 R05_QD01-34010000000-2007-12 验证成功!
字符串 R23_QD21_02-34010000000-2007-01 验证成功!
Process finished with exit code 0
有关正则表达式的用法很简单,其实最关键的是要能写出所需要的正则表达式。有关语法可以参考Java API的java.util.regex.Pattern类。
另外,我在附件中给出了网上找到一个正则表达式文档,很不错,一起放上来。
下面是另外一个API测试例子:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2007-6-18 16:00:49
*/
public class TestPattern {
public static void main(String args[]) {
test1();
test2();
test3();
}
public static void test1() {
//创建正则表达式的模式对象
Pattern p = Pattern.compile("a*b");//零次或多次a,并跟着b
//通过模式对象创建一个匹配对象
Matcher m1 = p.matcher("aaaaabxyzabt");
Matcher m2 = p.matcher("aaaaab");
//尝试将整个区域与模式匹配。当且仅当整个区域序列匹配此匹配器的模式时才返回 true。
boolean b11 = m1.matches();
boolean b12 = m2.matches();
System.out.println(b11 + "\t" + b12);
//编译给定正则表达式并尝试将给定输入与其匹配。
boolean b21 = Pattern.matches("a*b", "aaaaabxyzabt");
boolean b22 = Pattern.matches("a*b", "aaaaab");
System.out.println(b21 + "\t" + b22);
System.out.println(p.flags());
}
/**
* 进行大小写忽略和多行模式测试
*/
public static void test2() {
Pattern p1 = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);
Pattern p2 = Pattern.compile("a*b", Pattern.MULTILINE);
Matcher m11 = p1.matcher("aaaaaBABzAbt");
Matcher m12 = p1.matcher("Ab");
Matcher m21 = p2.matcher("a\n" + "b");
Matcher m22 = p2.matcher("ab");
boolean b11 = m11.matches();
boolean b12 = m12.matches();
System.out.println(b11 + "\t" + b12);
boolean b21 = m21.matches();
boolean b22 = m22.matches();
System.out.println(b21 + "\t" + b22);
//返回此模式的匹配标志。
System.out.println(p1.flags());
//返回在其中编译过此模式的正则表达式。
System.out.println(p1.pattern());
//返回指定 String 的字面值模式 String。
System.out.println(Pattern.quote("aaaaa"));
//围绕此模式的匹配拆分给定输入序列。
String[] arr1 = p1.split("xabyayAbt");
for (String s : arr1) {
System.out.println(s);
}
//围绕此模式的匹配拆分给定输入序列。
String[] arr2 = p1.split("xabyayAbt", 2);
for (String s : arr2) {
System.out.println(s);
}
//返回此模式的字符串表示形式。
System.out.println(p1.toString());
}
public static void test3() {
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("cat two cats in the yard");
System.out.println(m.groupCount());
System.out.println(m.matches());
System.out.println(m.find());
System.out.println(m.find(8));
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
System.out.println(m.replaceAll("person"));
System.out.println(m.replaceFirst("person"));
while (m.find()) {
System.out.println(m.group());
}
}
}
java中正则匹配字符串长度_Java中使用正则表达式校验字符串相关推荐
- java字符串长度_Java中String字符串的最大长度?
1.Java中的字符串String最大长度,编译期如果是javac编译就是65534.如果绕过javac编译的限制,其最大长度可以达到u2类型变达的最大值65535. Oracle JDK的编译工具J ...
- Java正则匹配美元表达式_Java中的正则表达式“ $”(美元)元字符
子表达式/元字符" $ "与行尾匹配. 例子1import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...
- java获取字符串长度_java中定义字符串String s=”pzhu”,下面操作可以取得字符串长度的是( )。...
[单选] 施工现场宿舍.办公室等临时用房建筑构件的燃烧性能等级应为():当采用金属夹芯板材时,其芯材的燃烧性能等级应为(). [填空题] <敦煌曲谱>又名(),是933年用燕乐半字谱抄写的 ...
- java取number长度_Java中常用方法(NumberMath)
Java中常用方法(Number&Math) 包装类 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包 ...
- html img正则,html中正则匹配img
1.正则匹配html中的img标签,取出img的url并进行图片文件下载: /// /// 将image标签的src属性的url替换为base64 /// /// /// 返回替换imgurl后的qu ...
- python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧
详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...
- Java使用正则匹配
Java使用正则匹配 1.Java trim() 方法 2.匹配空格(一个或多个) 3.匹配回车换行 4.匹配字符串 整理一下正则表达式再Java中的使用 1.Java trim() 方法 删除头尾空 ...
- python截取指定字符串_python 正则匹配获取指定多个词的在字符串(句子/段落)索引位置...
python 正则匹配获取指定多个词的在字符串(句子/段落)索引位置 利用re.finditer()特性. finditer() 返回一个MatchObject类型的iterator,它提供了匹配对象 ...
- php正则匹配函数字符串长度,PHP中preg_match函数正则匹配的字符串长度问题
PHP中preg_match函数正则匹配的字符串长度问题 发布于 2015-10-25 10:24:29 | 166 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...
最新文章
- 2022-2028年中国科学仪器行业研究及前瞻分析报告
- 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
- 别在被骗了!!!!!!
- VC++中忽略所有默认库纯Win32 API编译及链接 - 计算机软件编程 - Wangye's Space
- 在SSH里用$.ajax()函数为何失败的一系列问题
- spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
- Android NDK 【错误】The method loadLibrary(String) is undefined for the type Settings.Syste
- 原生 JavaScript 实现扫雷
- linux nfc驱动程序,USB NFC读卡器ACR122 Linux程序编译
- OpenCV——SAD立体匹配
- 十进制和二进制相互转换
- 【蓝桥】算法训练 Beaver‘s Calculator(贪心)
- 讲给后台程序员看的前端系列教程(11)——HTML综合练习
- 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
- WPS加载项系列(2)第二个WPS项目
- SEO批量文章繁简转换,同义词替换
- idea generated-requests.http 表单请求示例
- Struts2面试常见问题
- 《Android源码设计模式解析与实战》读书笔记(十四)
- ssi 指令 php,SSI使用详解_PHP教程
热门文章
- dcu故障是哪_dcu故障是什么意思
- VulnHub靶场----Hackable_3
- 可爱的python图片_《可爱的Python》读书笔记(六)
- 使用vue3+element-plus+particles实现炫酷(粒子背景)登陆界面
- 通向KDE4之路(十六):KWin的复合形式为KDE带来光芒的光线
- 1307页阿里Android面试全套真题解析在互联网火了,Android程序员怎么优雅迈过30K+这道坎
- Web核心技术之JSP(过时技术)
- 数据库存储过程之优缺点
- 读取地磁指数Ap和太阳活动指数F107程序
- 7月书讯:最是那一低头阅读的温和