经过很久的努力,终于完成了JAVA自动生成正则表达式工具类。还记得之前需要正则,老是从网上找吗?找了想修改也不会修改。现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式。赶快在同事面前炫一下吧。
本正则表达式工具类,也整理了很多常用校验。例如:匹配汉字、行首、行尾、匹配除换行外的所有字符、匹配数字、匹配大写字母、匹配小写字母、匹配大小写字母、匹配小写字母和数字、匹配大写字母和数字、匹配大小写字母和数字、匹配大小写字母、数字、下划线、匹配一个单词的边界、匹配一个非单词的边界、匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。、匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。、匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。、与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
本工具类,你可以使用append()追加规则,or()或一个其他规则,repeat设置重复规则,让你方便生成正则表达式。
下面为一个生成邮箱正则的例子,匹配规则为:邮箱名允许大小写字母数字下划线,域名可以含数字、大小写字母、点、下划线,如果有些邮箱要求不同,可自行修改。
//验证邮箱总规则。 //邮箱名允许大小写字母数字下划线,域名可以含数字、大小写字母、点、下划线,如果有些邮箱要求不同,可自行修改。 RegexUtil r=new RegexUtil(); //@之前规则 RegexUtil before=new RegexUtil(RegexUtil.letterAndNumAndUnderLine);//允许大小写字母和下划线 before.repeatOneOrMore();//允许重复1-N次 r.append(before);//将@之前的规则追加到总规则 r.append("@");//追加上@符号 //@之后到最后一个域名点之前的规则 RegexUtil after=new RegexUtil(RegexUtil.letterAndNumAndUnderLine);//允许大小写字母和下划线 after.or(".");//允许点,防止邮箱二级域名,如:@vip.qq.com after.or("-");//域名中允许横线 after.repeatOneOrMore();//允许重复1-N次 r.append(after);//追加到总规则 //顶级域名前的点 r.append("."); //顶级域名的规则 RegexUtil last=new RegexUtil(RegexUtil.lowLetter);//顶级域名只允许小写字母 last.repeatOneOrMore();////允许重复1-N次 r.append(last); System.out.println(r);//打印总正则:[a-zA-Z0-9_]+@[a-zA-Z0-9_\.-]+\.[a-z]+ Pattern p = Pattern.compile(r.toString()); Matcher m = p.matcher("862990787@qq.com"); System.out.println(m.matches());
最后我贴出来这个自动生成正则的工具类,欢迎大家拍砖啊!
/** * 正则表达式生成工具类 * @author 朱志杰 QQ:862990787 */ public class RegexUtil { //记录拼接的表达式 private StringBuffer sb=new StringBuffer(); //正则表达式的特殊字符,需要进行转义处理 private String expectChar=".+*\\$^?{}()[]\\|"; /** * 匹配汉字 */ public static RegexUtil chinese=new RegexUtil("[\u4e00-\u9fa5]"); /** * 行首 */ public static RegexUtil lineHead=new RegexUtil("$"); /** * 行尾 */ public static RegexUtil lineTail=new RegexUtil("^"); /** * 匹配除换行外的所有字符 */ public static RegexUtil anyButLine=new RegexUtil("."); /** * 匹配数字 */ public static RegexUtil num=new RegexUtil("[0-9]"); /** * 匹配大写字母 */ public static RegexUtil upperLetter=new RegexUtil("[A-Z]"); /** * 匹配小写字母 */ public static RegexUtil lowLetter=new RegexUtil("[a-z]"); /** * 匹配大小写字母 */ public static RegexUtil letter=new RegexUtil("[a-zA-Z]"); /** * 匹配小写字母和数字 */ public static RegexUtil lowLetterAndNum=new RegexUtil("[a-z0-9]"); /** * 匹配大写字母和数字 */ public static RegexUtil upperLetterAndNum=new RegexUtil("[A-Z0-9]"); /** * 匹配大小写字母和数字 */ public static RegexUtil letterAndNum=new RegexUtil("[a-zA-Z0-9]"); /** * 匹配大小写字母、数字、下划线 */ public static RegexUtil letterAndNumAndUnderLine=new RegexUtil("[a-zA-Z0-9_]"); /** * 匹配一个单词的边界 */ public static RegexUtil boundary=new RegexUtil("\\b"); /** * 匹配一个非单词的边界 */ public static RegexUtil notBoundary=new RegexUtil("\\B"); /** * 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。 */ public static RegexUtil blank=new RegexUtil("\\s"); /** * 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。 */ public static RegexUtil notBlank=new RegexUtil("\\s"); /** * 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。 */ public static RegexUtil anyChar=new RegexUtil("\\w"); /** * 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。 */ public static RegexUtil notAnyChar=new RegexUtil("\\W"); public RegexUtil(){ } /** * 构造时就传入一个正则表达式 * @param regex 正则表达式 */ public RegexUtil(String regex){ sb=new StringBuffer(regex); } /** * 构造时就传入一个RegexUtil * @param regex 正则表达式 */ public RegexUtil(RegexUtil regex){ sb=new StringBuffer(regex.toString()); } /** * 执行最短匹配 */ public void minMatch(){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("?"); } /** * 重复0-N次,等效于 {0,}。 */ public void repeatZeroOrMore(){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("*"); } /** * 重复0或1次,等效于 {0,1}或?。 */ public void repeatZeroOrOne(){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("?"); } /** * 重复1-N次,等效于 {1,}。 */ public void repeatOneOrMore(){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("+"); } /** * 重复num次 * @param num 次数 */ public void repeat(int num){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("{"+num+"}"); } /** * 重复min-max次 * @param min 最小 * @param max 最大 */ public void repeat(int min,int max){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("{"+min+","+max+"}"); } /** * 至少重复num次 * @param num 次数 */ public void repeatMin(int num){ //判断最外面是否是中括号,不是加上中括号 sb=addMidBracketIfNo(sb); sb.append("{"+num+",}"); } /** * 若字符串两边不是中括号增加上中括号 * @param sb 原StringBuffer * @return StringBuffer */ private StringBuffer addMidBracketIfNo(StringBuffer sb) { if(!chkMidBracket(sb)){ return addMinBrackets(sb); }else{ return sb; } } /** * 字符串两边加上() * @param str 字符串 * @return StringBuffer */ private StringBuffer addMinBrackets(StringBuffer str){ return new StringBuffer("("+str+")"); } /** * 字符串两边加上[] * @param str 字符串 * @return StringBuffer */ private StringBuffer addMidBrackets(StringBuffer str){ return new StringBuffer("["+str+"]"); } /** * 去掉字符串两边的[] * @param str 字符串 * @return String */ private String removeMidBrackets(StringBuffer str){ return str.toString().replaceAll("^\\[", "").replaceAll("\\]$", ""); } /** * 对字符串里面的特殊字符进行处理 * @param str 源字符串 * @return String */ private String handleExpectChar(String str){ StringBuffer sbTemp=new StringBuffer(); char[] arr=str.toCharArray(); for(int i=0 ; i<arr.length ; i++){ if(expectChar.indexOf(arr[i])!=-1){ sbTemp.append("\\"+arr[i]); }else{ sbTemp.append(arr[i]); } } return sbTemp.toString(); } /** * 判断字符串最外围是否为中括号 * @param sb * @return boolean 是 true,否则 false。 */ private boolean chkMidBracket(StringBuffer sb){ if("[".equals(sb.substring(0, 1)) && "]".equals(sb.substring(sb.length()-1))){ return true; }else{ return false; } } /** * 追加一个正则 * @param re 正则 */ public void append(RegexUtil re){ sb.append(re.toString()); } /** * 追加一个正则表达式 * @param String 正则表达式 */ public void append(String re){ sb.append(handleExpectChar(re)); } /** * 或一个正则 * @param re 正则 */ public void or(RegexUtil re){ or(re.toString()); } /** * 或一个正则表达式 * @param String 正则表达式 */ public void or(String re){ //最外层为中括号 if(chkMidBracket(sb)){ //首先去掉两边的中括号 sb=new StringBuffer(removeMidBrackets(sb)); } if(re.length()>1){ //字符串用| sb.append("|"+handleExpectChar(re)); }else{ //非字符串直接追加 sb.append(handleExpectChar(re)); } //追加上中括号 sb=new StringBuffer(addMidBrackets(sb)); } /** * 对自己进行否处理 */ public void not(){ sb=new StringBuffer("[^"+sb+"]"); } /** * 返回正则表达式 */ public String toString(){ return sb.toString(); } }
相关推荐
掌握正则表达式是提升编程技能的重要一步,利用"正则式工具(自动生成正则表达式)"这类软件,不仅可以提高工作效率,也能为开发者带来更好的编程体验。通过不断实践和学习,你可以更熟练地运用正则表达式解决实际...
在Java中,`java.util.regex` 包提供了Pattern和Matcher类来处理正则表达式。然而,对于生成符合正则表达式的字符串,标准库并不提供直接支持。这时,我们可以引入第三方库,如`org.pcollections.Xeger` 和 `...
Java中的Xeger是一个非常有用的工具,它允许开发者根据指定的正则表达式生成随机的数据。Xeger是基于Java的org.apache.commons.text.RandomStringGenerator类和org.apache.commons.lang3.RandomStringUtils库的一个...
Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`matcher(String input)`方法与输入字符串关联。 - 常用的正则...
3. **工具辅助**:某些工具如`Rex.exe`(可能是某个专门用于生成正则表达式数据的工具),可以帮助我们根据给定的正则表达式生成随机数据,无需编写代码。 三、应用场景 1. **测试**:在软件测试中,模拟各种输入...
7. 正则表达式在线测试工具:文章中也提供了两个在线测试工具,一个是JavaScript正则表达式在线测试工具,另一个是正则表达式在线生成工具,这两个工具可以帮助开发者测试和生成正则表达式。 8. java正则表达式技巧...
Java 正则表达式,简称 `regx`,是一种强大的文本处理工具,它允许程序员通过预定义的模式来查找、替换或操作字符串。虽然在Java规范需求(Specification Request)中正则表达式的支持是在后续版本引入的,但在早期...
在Java编程语言中,正则表达式是一个强大的工具,能够帮助开发者高效地处理字符串。本文将详细介绍如何在Java中使用正则表达式以及测试正则表达式的软件。 首先,让我们了解一下Java中的正则表达式基础。在Java中,...
4. 代码生成:支持多种编程语言(如Java, C#, JavaScript等),自动生成相应的代码片段。 5. 转换和优化:简化复杂正则表达式,提高效率,或者将一种正则语法转换为另一种兼容的语法。 6. 案例库:内置大量示例,...
正则表达式是一种强大的文本处理工具,用于匹配字符串模式。在计算机科学中,它与形式语言理论密切相关,尤其是在编译器设计和文本处理程序中。正则表达式通常被转换为确定有限状态自动机(DFA)以进行高效地模式...
Java正则表达式测试器是一款强大的工具,专为在Java环境中进行正则表达式测试而设计。它使得开发者能够在编写和调试正则表达式时节省大量时间和精力,避免了传统方式下反复试错的繁琐过程。这个工具的核心功能是提供...
Java正则表达式是Java编程语言中的一个强大工具,它用于处理字符串,进行模式匹配和文本搜索与替换。正则表达式(Regular Expression)是一种特殊的字符序列,可以用来定义一个字符串模式,帮助开发者在大量文本中...
6. **代码生成**:工具能够生成适用于多种编程语言(如JavaScript、Python、Java等)的正则表达式代码片段,便于用户直接应用到项目中。 “非常好用”这一评价意味着这款工具可能具有良好的用户体验,例如响应速度...
Java提供了`java.util.regex`包来支持正则表达式的使用,该包主要包括两个核心类:`Pattern`和`Matcher`。 - **Pattern**:它是正则表达式的编译表示。`Pattern`对象不能直接创建,而是通过调用`Pattern`类的静态...
Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或提取文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本搜索与替换等。本课件旨在为初学者提供一个Java...
在Java中,正则表达式的处理主要通过`java.util.regex`包下的类完成,主要包括`Pattern`和`Matcher`两个核心类。 ##### 2.1 Pattern类 `Pattern`类用于编译正则表达式,创建模式对象。通过静态方法`compile(String...
在Java编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于匹配、查找、替换等操作。本话题聚焦于如何利用Java来生成一个正则表达式,这个表达式能够验证一个字符串是否代表了在特定范围内...
在Java编程语言中,正则表达式是一种强大的文本处理工具,用于模式匹配、搜索和替换。这个"java类对正则表达式的处理"是作者创建的一个独立的Java类,旨在简化正则表达式的操作,无需深入理解底层实现,使用者可以...
6. **代码生成**:生成可直接用于编程语言的正则表达式代码,节省开发时间。 7. **学习资源**:许多正则表达式验证工具还会包含正则表达式语法的教程和参考,帮助用户提升正则表达式技能。 例如,"RegExBuilder...
Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。在线Java正则表达式测试工具是开发者常用的辅助资源,可以帮助他们在编写和调试正则表达式时实时查看...