正则表达式 生成 java_JAVA自动生成正则表达式工具类

/*** 正则表达式生成工具类

*@author朱志杰 QQ:862990787*/

public classRegexUtil {//记录拼接的表达式

private StringBuffer sb=newStringBuffer();//正则表达式的特殊字符,需要进行转义处理

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");publicRegexUtil(){

}/*** 构造时就传入一个正则表达式

*@paramregex 正则表达式*/

publicRegexUtil(String regex){

sb=newStringBuffer(regex);

}/*** 构造时就传入一个RegexUtil

*@paramregex 正则表达式*/

publicRegexUtil(RegexUtil regex){

sb=newStringBuffer(regex.toString());

}/*** 执行最短匹配*/

public voidminMatch(){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("?");

}/*** 重复0-N次,等效于 {0,}。*/

public voidrepeatZeroOrMore(){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("*");

}/*** 重复0或1次,等效于 {0,1}或?。*/

public voidrepeatZeroOrOne(){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("?");

}/*** 重复1-N次,等效于 {1,}。*/

public voidrepeatOneOrMore(){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("+");

}/*** 重复num次

*@paramnum 次数*/

public void repeat(intnum){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("{"+num+"}");

}/*** 重复min-max次

*@parammin 最小

*@parammax 最大*/

public void repeat(int min,intmax){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("{"+min+","+max+"}");

}/*** 至少重复num次

*@paramnum 次数*/

public void repeatMin(intnum){//判断最外面是否是中括号,不是加上中括号

sb=addMidBracketIfNo(sb);

sb.append("{"+num+",}");

}/*** 若字符串两边不是中括号增加上中括号

*@paramsb 原StringBuffer

*@returnStringBuffer*/

privateStringBuffer addMidBracketIfNo(StringBuffer sb) {if(!chkMidBracket(sb)){returnaddMinBrackets(sb);

}else{returnsb;

}

}/*** 字符串两边加上()

*@paramstr 字符串

*@returnStringBuffer*/

privateStringBuffer addMinBrackets(StringBuffer str){return new StringBuffer("("+str+")");

}/*** 字符串两边加上[]

*@paramstr 字符串

*@returnStringBuffer*/

privateStringBuffer addMidBrackets(StringBuffer str){return new StringBuffer("["+str+"]");

}/*** 去掉字符串两边的[]

*@paramstr 字符串

*@returnString*/

privateString removeMidBrackets(StringBuffer str){return str.toString().replaceAll("^\\[", "").replaceAll("\\]$", "");

}/*** 对字符串里面的特殊字符进行处理

*@paramstr 源字符串

*@returnString*/

privateString handleExpectChar(String str){

StringBuffer sbTemp=newStringBuffer();char[] arr=str.toCharArray();for(int i=0 ; i

sbTemp.append("\\"+arr[i]);

}else{

sbTemp.append(arr[i]);

}

}returnsbTemp.toString();

}/*** 判断字符串最外围是否为中括号

*@paramsb

*@returnboolean 是 true,否则 false。*/

private booleanchkMidBracket(StringBuffer sb){if("[".equals(sb.substring(0, 1)) && "]".equals(sb.substring(sb.length()-1))){return true;

}else{return false;

}

}/*** 追加一个正则

*@paramre 正则*/

public voidappend(RegexUtil re){

sb.append(re.toString());

}/*** 追加一个正则表达式

*@paramString 正则表达式*/

public voidappend(String re){

sb.append(handleExpectChar(re));

}/*** 或一个正则

*@paramre 正则*/

public voidor(RegexUtil re){

or(re.toString());

}/*** 或一个正则表达式

*@paramString 正则表达式*/

public voidor(String re){//最外层为中括号

if(chkMidBracket(sb)){//首先去掉两边的中括号

sb=newStringBuffer(removeMidBrackets(sb));

}if(re.length()>1){//字符串用|

sb.append("|"+handleExpectChar(re));

}else{//非字符串直接追加

sb.append(handleExpectChar(re));

}//追加上中括号

sb=newStringBuffer(addMidBrackets(sb));

}/*** 对自己进行否处理*/

public voidnot(){

sb=new StringBuffer("[^"+sb+"]");

}/*** 返回正则表达式*/

publicString toString(){returnsb.toString();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值