Hutool之正则表达式工具类——ReUtil

前言

在文本处理中,正则表达式几乎是全能的,但是Java的正则表达式有时候处理一些事情还是有些繁琐,所以我封装了部分常用功能。就比如说我要匹配一段文本中的某些部分,我们需要这样做:

Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
    String result= matcher.group();
}

其中牵涉到多个对象,想用的时候真心记不住。好吧,既然功能如此常用,我就封装一下:

/**
* 获得匹配的字符串
*
* @param pattern 编译后的正则模式
* @param content 被匹配的内容
* @param groupIndex 匹配正则的分组序号
* @return 匹配后得到的字符串,未匹配返回null
*/
public static String get(Pattern pattern, String content, int groupIndex) {
    Matcher matcher = pattern.matcher(content);
    if (matcher.find()) {
        return matcher.group(groupIndex);
    }
    return null;
}

/**
* 获得匹配的字符串
*
* @param regex 匹配的正则
* @param content 被匹配的内容
* @param groupIndex 匹配正则的分组序号
* @return 匹配后得到的字符串,未匹配返回null
*/
public static String get(String regex, String content, int groupIndex) {
    Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
    return get(pattern, content, groupIndex);
}

其他方法介绍

其他方法我做了一个Demo类,方便大家参考,地址:

https://github.com/looly/hutool/blob/master/src/test/java/com/xiaoleilu/hutool/demo/ReUtilDemo.java

或者

http://git.oschina.net/loolly/hutool/blob/master/src/test/java/com/xiaoleilu/hutool/demo/ReUtilDemo.java

Demo代码

package com.xiaoleilu.hutool.demo;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;

import com.xiaoleilu.hutool.Log;
import com.xiaoleilu.hutool.ReUtil;

/**
 * 正则表达式工具类Demo
 * @author Looly
 *
 */
public class ReUtilDemo {
    private final static Logger log = Log.get();

    public static void main(String[] args) {
        String content = "ZZZaaabbbccc中文1234";

        //get demo 正则查找匹配的第一个字符串
        String resultGet = ReUtil.get("\\w{2}", content, 0);
        log.debug("get: {}", resultGet);

        log.debug("---------------------------------------------------------");

        //抽取多个分组然后把它们拼接起来
        String resultExtractMulti = ReUtil.extractMulti("(\\w)aa(\\w)", content, "$1-$2");
        log.debug("extractMulti: {}", resultExtractMulti);

        log.debug("---------------------------------------------------------");

        //抽取多个分组然后把原文匹配到位置之前的内容都删除
        String[] contents = new String[]{content};
        String resultExtractMultiAndDelPre = ReUtil.extractMultiAndDelPre("(\\w)aa(\\w)", contents, "$1-$2");
        log.debug("extractMultiAndDelPre: content: {}, extract: {}", contents[0], resultExtractMultiAndDelPre);

        log.debug("---------------------------------------------------------");

        //删除第一个匹配到的内容
        String resultDelFirst = ReUtil.delFirst("(\\w)aa(\\w)", content);
        log.debug("delFirst: {}", resultDelFirst);

        log.debug("---------------------------------------------------------");

        //删除第一个匹配到的内容以及之前的文本
        String resultDelPre = ReUtil.delPre("(\\w)aa(\\w)", content);
        log.debug("delPre: {}", resultDelPre);

        log.debug("---------------------------------------------------------");

        //查找所有匹配文本
        List<String> resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList<String>());
        log.debug("findAll: {}", resultFindAll);

        log.debug("---------------------------------------------------------");

        //找到匹配的第一个数字
        Integer resultGetFirstNumber= ReUtil.getFirstNumber(content);
        log.debug("getFirstNumber: {}", resultGetFirstNumber);

        log.debug("---------------------------------------------------------");

        //格式是否符合Ipv4格式
        log.debug("isIpv4: {}", ReUtil.isIpv4("127.0.0.1"));

        log.debug("---------------------------------------------------------");

        //给定字符串是否匹配给定正则
        log.debug("isMatch: {}", ReUtil.isMatch("\\w+[\u4E00-\u9FFF]+\\d+", content));

        log.debug("---------------------------------------------------------");

        //通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
        log.debug("replaceAll: {}", ReUtil.replaceAll(content, "(\\d+)", "->$1<-"));

        log.debug("---------------------------------------------------------");

        //转义给定字符串,为正则相关的特殊符号转义
        log.debug("replaceAll: {}", ReUtil.escape("我有个$符号{}"));

        log.debug("---------------------------------------------------------");
    }
}

我的项目地址:

时间: 2024-08-29 17:01:55

Hutool之正则表达式工具类——ReUtil的相关文章

正则表达式工具类单例

/// <summary> /// 正则表达式工具类单例 /// </summary> public class RegexTool { private static volatile RegexTool regex = null; private static object syncRoot = new Object(); /// <summary> /// 注册需要转换的类型 /// </summary> private RegexTool() { }

正则表达式工具类

一个利用正则表达式来从文本中过滤提取数据的工具类.可以用来抓取网页后过滤所需的文本.^_^ 正则表达式语法规则可参考:http://blog.csdn.net/clementad/article/details/46661279 代码如下: package com.xjj.util; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.P

编写一个简单的正则表达式工具类

跟着视频的讲解,也亲手敲了这么一个正则表达式的类,感觉很不错,真是温故而知新,本来想把注释写的逼格高一点的,今天晚了有点累,先简单的写一下,有时间了再完善完善. <?php class regexTool{ //内置一些常用的正则表达式 private $validate = array( 'require'   =>  '/.+/', 'email'     =>  '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', 'url'    

Android 中正则表达式工具类

1 package com.example.administrator.magiclamp.utils; 2 3 import java.util.regex.Pattern; 4 5 /** 6 * 校验器:利用正则表达式校验邮箱.手机号等 7 * @author Mr.duan 8 */ 9 public class Validator { 10 /** 11 * 正则表达式:验证用户名(不包含中文和特殊字符)如果用户名使用手机号码或邮箱 则结合手机号验证和邮箱验证 12 */ 13 pub

Java常用工具类之RegexpUtils,正则表达式工具类

package com.test.core.util; import org.apache.log4j.Logger; import org.apache.oro.text.regex.MalformedPatternException; import org.apache.oro.text.regex.Pattern; import org.apache.oro.text.regex.PatternCompiler; import org.apache.oro.text.regex.Patte

java HTML字符串正则表达式使用工具类

原文:java HTML字符串正则表达式使用工具类 代码下载地址:http://www.zuidaima.com/share/1550463453416448.htm HTML相关的正则表达式工具类 包括过滤HTML标记,转换HTML标记,替换特定HTML标记 package com.zuidaima.common.util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: H

实用工具类--第三方开源--Lazy

下载地址 :https://github.com/ddwhan0123/Lazy 工具 描述 AnimationUtils 动画工具类 AppUtils APP相关信息工具类 AssetDatabaseOpenHelper 目录资源获取 Base64 加密 BitmapUtil 获取Bitmap和对Bitmap的操作 ChannelUtil 获取市场号 Colors 颜色工具类 包括常用的色值 DES DES加密解密类 DataCleanManager 本应用数据清除管理器 DatabaseEx

Android常用正则工具类

此类提供日常开发中常用的正则验证函数,比如:邮箱.手机号.电话号码.身份证号码.日期.数字.小数.URL.IP地址等.使用Pattern对象的matches方法进行整个字符匹配,调用该方法相当于:        Pattern p = Pattern.compile(regex);        Matcher m = p.matcher(input);        return m.matches();每个正则可能还有待优化的地方,您如有更好的方式实现某一个功能的验证,欢迎提出来大家一起讨论

.net使用正则表达式校验、匹配字符工具类

开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: 1 /// <summary> 2 /// 字符(串)验证.匹配工具类 3 /// </summary> 4 public class ValidatorTools 5 { 6 #region 匹配方法 7 /// <summary> 8 /// 验证字符串是否匹配正则表达式描述的规则 9 /// </summary> 10 /// <param name="inputStr&