• 正则工具-ReUtil
    • 由来
    • 使用
      • ReUtil.extractMulti
      • ReUtil.delFirst
      • ReUtil.findAll
      • ReUtil.getFirstNumber
      • ReUtil.isMatch
      • ReUtil.replaceAll
      • ReUtil.escape

    正则工具-ReUtil

    由来

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

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

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

    1. /**
    2. * 获得匹配的字符串
    3. *
    4. * @param pattern 编译后的正则模式
    5. * @param content 被匹配的内容
    6. * @param groupIndex 匹配正则的分组序号
    7. * @return 匹配后得到的字符串,未匹配返回null
    8. */
    9. public static String get(Pattern pattern, String content, int groupIndex) {
    10. Matcher matcher = pattern.matcher(content);
    11. if (matcher.find()) {
    12. return matcher.group(groupIndex);
    13. }
    14. return null;
    15. }
    16. /**
    17. * 获得匹配的字符串
    18. *
    19. * @param regex 匹配的正则
    20. * @param content 被匹配的内容
    21. * @param groupIndex 匹配正则的分组序号
    22. * @return 匹配后得到的字符串,未匹配返回null
    23. */
    24. public static String get(String regex, String content, int groupIndex) {
    25. Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
    26. return get(pattern, content, groupIndex);
    27. }

    使用

    ReUtil.extractMulti

    抽取多个分组然后把它们拼接起来

    1. String resultExtractMulti = ReUtil.extractMulti("(\\w)aa(\\w)", content, "$1-$2");
    2. Assert.assertEquals("Z-a", resultExtractMulti);

    ReUtil.delFirst

    删除第一个匹配到的内容

    1. String resultDelFirst = ReUtil.delFirst("(\\w)aa(\\w)", content);
    2. Assert.assertEquals("ZZbbbccc中文1234", resultDelFirst);

    ReUtil.findAll

    查找所有匹配文本

    1. List<String> resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList<String>());
    2. ArrayList<String> expected = CollectionUtil.newArrayList("ZZ", "Za", "aa", "bb", "bc", "cc", "12", "34");
    3. Assert.assertEquals(expected, resultFindAll);

    ReUtil.getFirstNumber

    找到匹配的第一个数字

    1. Integer resultGetFirstNumber = ReUtil.getFirstNumber(content);
    2. Assert.assertEquals(Integer.valueOf(1234), resultGetFirstNumber);

    ReUtil.isMatch

    给定字符串是否匹配给定正则

    1. boolean isMatch = ReUtil.isMatch("\\w+[\u4E00-\u9FFF]+\\d+", content);
    2. Assert.assertTrue(isMatch);

    ReUtil.replaceAll

    通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串

    1. //此处把1234替换为 ->1234<-
    2. String replaceAll = ReUtil.replaceAll(content, "(\\d+)", "->$1<-");
    3. Assert.assertEquals("ZZZaaabbbccc中文->1234<-", replaceAll);

    ReUtil.escape

    转义给定字符串,为正则相关的特殊符号转义

    1. String escape = ReUtil.escape("我有个$符号{}");
    2. Assert.assertEquals("我有个\\$符号\\{\\}", escape);