Java正则提取中括号中的内容操作示例

本文实例讲述了Java正则提取中括号中的内容操作。分享给大家供大家参考,具体如下:

曾经在工作中遇到一个问题,就是需要提取字符串中每一个中括号里的内容,在网上搜了一下,发现用正则表达式可以提取中括号中的内容,具体实现如下:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractMessage {
  public static void main(String[] args) {
    String msg = "PerformanceManager[第1个中括号]Product[第2个中括号]<[第3个中括号]79~";
    List<String> list = extractMessageByRegular(msg);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(i+"-->"+list.get(i));
    }
  }
  /**
   * 使用正则表达式提取中括号中的内容
   * @param msg
   * @return
   */
  public static List<String> extractMessageByRegular(String msg){
    List<String> list=new ArrayList<String>();
    Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
    Matcher m = p.matcher(msg);
    while(m.find()){
      list.add(m.group().substring(1, m.group().length()-1));
    }
    return list;
  }
}

输出结果如下:

0-->第1个中括号
1-->第2个中括号
2-->第3个中括号

这样很快就完成了代码的工作,但是后来发现如果中括号中还包含中括号,正则表达式就失去作用了,我不得不自己想办法解决,经过研究终于招到了解决方法,具体实现如下:

package com.perry.test;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ExtractMessage {
  public static void main(String[] args) {
    String msg = "PerformanceManager[第1个中括号]Product[第2个中括号[中括号中包含中括号]]<[第3个中括号]79~";
    List<String> list = extractMessage(msg);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(i+"-->"+list.get(i));
    }
  }
  /**
   * 提取中括号中内容,忽略中括号中的中括号
   * @param msg
   * @return
   */
  public static List<String> extractMessage(String msg) {
    List<String> list = new ArrayList<String>();
    int start = 0;
    int startFlag = 0;
    int endFlag = 0;
    for (int i = 0; i < msg.length(); i++) {
      if (msg.charAt(i) == '[') {
        startFlag++;
        if (startFlag == endFlag + 1) {
          start = i;
        }
      } else if (msg.charAt(i) == ']') {
        endFlag++;
        if (endFlag == startFlag) {
          list.add(msg.substring(start + 1, i));
        }
      }
    }
    return list;
  }
}

输出结果如下:

0-->第1个中括号
1-->第2个中括号[中括号中包含中括号]
2-->第3个中括号

主要思路就是遍历字符串,在中括号的开始和结束位置做标记计数,如果是中括号开始位置对应的结束位置,那么开始位置和结束位置的计数是一致的,这样截取的就是一个完整的中括号的内容。

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java中 利用正则表达式提取( )内内容

    昨天遇到一个小问题,需要批量处理一些用户,而前台传来的用户格式如下,要提取括号中间的内容(不带括号) 教师10(0010)教师11(0011)教师9(009)教师12(0012)教师13(0013)教师14(0014) 本来想用java的String.split()和substring()来搞定,但是需要处理多次比较麻烦,就用正则表达式了.虽然语法忘得差不多了,但是印象中用断言比较方便(关键希望结果不带括号).打开RegexBuddy试了下,轻松搞定:下边是java实现代码: 复制代码 代码如下

  • Java正则表达式提取字符的方法实例

    正好遇到一个需求需要将字符串中特定的字符全部提取出来,这个如果是按常规的字符串处理的话非常的繁琐.于是想到用正则表达式来完成.项目需求是这样的:需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6 实现方法: import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String s

  • java正则表达式提取数字的方法实例

    复制代码 代码如下: @Test    public void test33() {        String phoneString = "哈哈,13888889999";        // 提取数字        // 1        Pattern pattern = Pattern.compile("[^0-9]");        Matcher matcher = pattern.matcher(phoneString);        Strin

  • java基于正则提取字符串中的数字功能【如提取短信中的验证码】

    本文实例讲述了java基于正则提取字符串中的数字功能.分享给大家供大家参考,具体如下: 使用Java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pattern = Pattern.compile("(13|14|15|18)\\d{9}"); Matcher matcher = pattern.matcher(smsBody); while (mat

  • Java使用正则表达式提取XML节点内容的方法示例

    本文实例讲述了Java使用正则表达式提取XML节点内容的方法.分享给大家供大家参考,具体如下: 现在有类似<doc>abc</doc><title>3232</title> <doc>只要内容</doc>这么一个串,需要提取abc,3232,只要内容的节点内容 public static List getContext(String html) { List resultList = new ArrayList(); Pattern

  • java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】

    本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示Java正则表达式提取需要的字符并放入数组,即ArrayList数组去重复功能. 具体代码如下: package com.test.tool; import java.util.ArrayList; import java.util.HashSet; import java.util.regex.*; public class MatchTest { public static void ma

  • Java用正则表达式实现${name}形式的字符串模板实例

    前言 相信大家可能曾遇到过这种情况,在开发中类似站内信的需求时,我们经常要使用字符串模板,比如 尊敬的用户${name}.... 里面的${name}就可以替换为用户的用户名. 下面使用正则表达式简单实现一下这个功能: /** * 根据键值对填充字符串,如("hello ${name}",{name:"xiaoming"}) * 输出: * @param content * @param map * @return */ public static String r

  • Java利用正则表达式提取数据的方法

    什么是正则表达式 正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. Java利用正则表达式提取数据 Java正则表达式的用途很广,之前要用到将一大 3M 的 txt 文本切分成多个小文本,用 C# 写的话很简洁,代码也就二十几行,今天用 Java 写了一下,果然,Java 很罗嗦. 切分文件的代码

  • Java正则提取中括号中的内容操作示例

    本文实例讲述了Java正则提取中括号中的内容操作.分享给大家供大家参考,具体如下: 曾经在工作中遇到一个问题,就是需要提取字符串中每一个中括号里的内容,在网上搜了一下,发现用正则表达式可以提取中括号中的内容,具体实现如下: import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExtractMes

  • Java HtmlParse提取标签中的值操作

    ☆代码示例: 代码块语法遵循标准markdown代码,例如: package cas; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.StringFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tag

  • java正则匹配HTML中a标签里的中文字符示例

    本文实例讲述了java正则匹配HTML中a标签里的中文字符.分享给大家供大家参考,具体如下: 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: <a href='www.baidu.comds=id32434#comment'rewr>特432</a> 453543 <a guhll,,l>a1特123你好123吗?</a> <a href=id=32434#comment'ewrer>特2</a> <a>标签中的

  • java 8 lambda表达式中的异常处理操作

    简介 java 8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的Functional Interface并没有很好的处理异常,因为JDK提供的这些Functional Interface通常都是没有抛出异常的,这意味着需要我们自己手动来处理异常. 因为异常分为Unchecked Exception和checked Exception,我们分别来讨论. 处理Unchecked Exception Unchecked exc

  • java正则替换sql中的参数实例代码

    目录 前言 要求: 分析: 代码: 测试: 总结: 前言 在处理sql参数的时候,替换圆括号里面只处理了一种情况.而没有从整体上进行处理!!! 这是一个思考问题上严重的偏向. 考虑问题时候,要先从整体开始考虑,逐步分解,再细分到局部! 要求: 替换sql里面的参数: SELECT a.table_id, a.table_title, a.table_name, a.table_serial, b.STAFF_NAME , b.REGION_NAME, b.operatingsystem, b.r

  • 利用Java实现解析网页中的内容

    目录 一.题目描述 二.解题思路 三.代码详解 一.题目描述 题目实现:做一个解析指定网址的网页内容小应用. 二.解题思路 创建一个类:InternetContentFrame,继承JFrame窗体类. 定义一个getURLCollection()方法:用于解析网页内容 使用URLConnection类的getInputStream()方法 获取网页资源的输入流对象. 三.代码详解 InternetContentFrame package com.xiaoxuzhu; import java.a

  • C++实现删除txt文件中指定内容的示例代码

    默认明白C++的文件输入输出流 方法: 新建一个中间文件,逐行读取原文件(test.txt)的内容并写入到中间文件(temp.txt),遇到需要删除的内容则跳过. 再将中间文件的内容写入原文件,删除中间文件. fstream in("C:\\Users\\Administrator\\Desktop\\test.txt", ios::in);//原文件 fstream out("C:\\Users\\Administrator\\Desktop\\temp.txt"

  • Java实现Http工具类的封装操作示例

    本文实例讲述了Java实现Http工具类的封装操作.分享给大家供大家参考,具体如下: http工具类的实现:(通过apache包)第一个类 import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolE

  • Java使用Thread创建多线程并启动操作示例

    本文实例讲述了Java使用Thread创建多线程并启动操作.分享给大家供大家参考,具体如下: 按照教程实现了一个单线程的创建,但是单线程的创建于启动并不是很有实用价值的.毕竟直接在main方法中放着相关的执行操作本身也就是一种单线程的实现.接下来在之前用过的代码基础上稍作修改,形成如下代码: class ThreadDemo extends Thread { ThreadDemo(){}; ThreadDemo(String szName) { super(szName); } public v

随机推荐