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中使用正则表达式校验字符串相关推荐

  1. java字符串长度_Java中String字符串的最大长度?

    1.Java中的字符串String最大长度,编译期如果是javac编译就是65534.如果绕过javac编译的限制,其最大长度可以达到u2类型变达的最大值65535. Oracle JDK的编译工具J ...

  2. Java正则匹配美元表达式_Java中的正则表达式“ $”(美元)元字符

    子表达式/元字符" $ "与行尾匹配. 例子1import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  3. java获取字符串长度_java中定义字符串String s=”pzhu”,下面操作可以取得字符串长度的是( )。...

    [单选] 施工现场宿舍.办公室等临时用房建筑构件的燃烧性能等级应为():当采用金属夹芯板材时,其芯材的燃烧性能等级应为(). [填空题] <敦煌曲谱>又名(),是933年用燕乐半字谱抄写的 ...

  4. java取number长度_Java中常用方法(NumberMath)

    Java中常用方法(Number&Math) 包装类 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包 ...

  5. html img正则,html中正则匹配img

    1.正则匹配html中的img标签,取出img的url并进行图片文件下载: /// /// 将image标签的src属性的url替换为base64 /// /// /// 返回替换imgurl后的qu ...

  6. python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧

    详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...

  7. Java使用正则匹配

    Java使用正则匹配 1.Java trim() 方法 2.匹配空格(一个或多个) 3.匹配回车换行 4.匹配字符串 整理一下正则表达式再Java中的使用 1.Java trim() 方法 删除头尾空 ...

  8. python截取指定字符串_python 正则匹配获取指定多个词的在字符串(句子/段落)索引位置...

    python 正则匹配获取指定多个词的在字符串(句子/段落)索引位置 利用re.finditer()特性. finditer() 返回一个MatchObject类型的iterator,它提供了匹配对象 ...

  9. php正则匹配函数字符串长度,PHP中preg_match函数正则匹配的字符串长度问题

    PHP中preg_match函数正则匹配的字符串长度问题 发布于 2015-10-25 10:24:29 | 166 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

最新文章

  1. 2022-2028年中国科学仪器行业研究及前瞻分析报告
  2. 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
  3. 别在被骗了!!!!!!
  4. VC++中忽略所有默认库纯Win32 API编译及链接 - 计算机软件编程 - Wangye's Space
  5. 在SSH里用$.ajax()函数为何失败的一系列问题
  6. spring Boot环境下dubbo+zookeeper的一个基础讲解与示例
  7. Android NDK 【错误】The method loadLibrary(String) is undefined for the type Settings.Syste
  8. 原生 JavaScript 实现扫雷
  9. linux nfc驱动程序,USB NFC读卡器ACR122 Linux程序编译
  10. OpenCV——SAD立体匹配
  11. 十进制和二进制相互转换
  12. 【蓝桥】算法训练 Beaver‘s Calculator(贪心)
  13. 讲给后台程序员看的前端系列教程(11)——HTML综合练习
  14. 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
  15. WPS加载项系列(2)第二个WPS项目
  16. SEO批量文章繁简转换,同义词替换
  17. idea generated-requests.http 表单请求示例
  18. Struts2面试常见问题
  19. 《Android源码设计模式解析与实战》读书笔记(十四)
  20. ssi 指令 php,SSI使用详解_PHP教程

热门文章

  1. dcu故障是哪_dcu故障是什么意思
  2. VulnHub靶场----Hackable_3
  3. 可爱的python图片_《可爱的Python》读书笔记(六)
  4. 使用vue3+element-plus+particles实现炫酷(粒子背景)登陆界面
  5. 通向KDE4之路(十六):KWin的复合形式为KDE带来光芒的光线
  6. 1307页阿里Android面试全套真题解析在互联网火了,Android程序员怎么优雅迈过30K+这道坎
  7. Web核心技术之JSP(过时技术)
  8. 数据库存储过程之优缺点
  9. 读取地磁指数Ap和太阳活动指数F107程序
  10. 7月书讯:最是那一低头阅读的温和