武汉java培训
达内武汉中心

15271940953

热门课程

达内学员总结:Java正则表达式详解

  • 时间:2016-07-14
  • 发布:kuchensheng
  • 来源:51CTO

    正则表达式引擎是一种可以处理正则表达式的软件。许多语言都支持正则表达式处理文本,例如PHP、Java和JavaScript,一些文本编辑器用正则表达式实现高级搜索-替换功能。Java中加入了java.util.regex包提供对正则表达式的支持,而且Java.lang.String类中的函数也是调用的正则表达式来实现的。接下来将讲解着两方面的使用
使用String类的匹配功能:匹配、拆分和替换
使用正则表达式库java.util.reg:查找、提取、分割、替换

1、使用String类的匹配功能
    在String中有4个方法可以使用正则表达式,他们是matches()、split()、replaceAll()和replaceFirst()。
    matches()方法可以判断当前的字符串是否匹配给定的正则表达式。
public boolean matches(String regex);

    split()方法可以分隔字符串,并以String数组的形式返回结果。
public String[] split(String regex);
public String[] split(String regex,int limit);

    replaceAll()和replaceFirst()方法
public String replaceAll(String regex,String replacement);
public String replaceFirst(String regex,String replacement);

 2、使用正则表达式库Pattern和Matcher
    JDK的正则表达式库java.util.reg提供了两个类Pattern和Matcher,用来进行正则表达式的匹配和查找功能。
    (1)Pattern表达式
    Pattern为字符串的正则表达式,可以直接根据一个正则表达式创建一个Pattern。
Pattern p = Pattern.compile("a*b");
    (2)Matcher匹配器
    使用Pattern对象获得Matcher匹配器对象,然后创建匹配器,可以使用它执行不同的匹配操作。
matches()方法尝试将整个输入序列与该模式匹配
lookingAt()方法尝试将输入序列从头开始与该模式匹配
find()方法扫描输入序列以查找与该模式匹配的下一个子序列

3、正则表达式库的4中功能
    正则表达式在处理字符串上有强大的功能,主要是使用Matcher的匹配函数,共有4中常用功能。
查询---find()
提取---group()
分割---split()
替换---replaceAll()

示例如下:
/**
     * 获取xml文本中某个节点的文本值
     * @param xml 查找的xml文本
     * @param nodeName 节点名称
     *
     * @return 目标节点的文本值
     */
    public static String getNodeText(String xml, String nodeName) {
        String regex = "<(" + nodeName + ")>([^<>/]*)</\\1>";
        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(xml);
        if (m.find()) {
            return m.group(2);
        } else {
            return null;
        }
    }
     
    /**
     * 获取SOAP-xml文本中某个节点的文本值
     * @param xml 查找的xml文本
     * @param nodeName 节点名称
     *
     * @return 目标节点的文本值
     */
    public static String getSoapNodeText(String xml, String nodeName,String prefix) {
        nodeName=prefix+":"+nodeName;
        String regex = "<(" + nodeName + ")>([^<>/]*)</\\1>";
        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(xml);
        if (m.find()) {
            return m.group(2);
        } else {
            return null;
        }
    }
     
    /**
     * 获取xml文本中某个节点的文本值
     * @param xml 查找的xml文本
     * @param nodeName 节点名称
     *
     * @return 目标节点的文本值
     */
    public static String getNodeTextByNum(String xml, String nodeName, int num) {
        String regex = "<(" + nodeName + ")>([^<>/]*)</\\1>";
        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(xml);
        int i = 1;
        while (m.find()) {
            if (i++ == num) {
                return m.group(2);
            }
        }
        return null;
    }
     
    /**
     * 获取xml中某节点有重复出现时所有的节点的文本值
     * @param xml 查找的xml文本
     * @param nodeName 节点名称
     *
     * @return 目标节点的文本值
     */
    public static List<String> getNodeTextList(String xml, String nodeName) {
        List<String> list=new ArrayList<String>();
        String regex = "<(" + nodeName + ")>([^<>/]*)</\\1>";
        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(xml);
        while (m.find()) {
            list.add(m.group(2));
        }
        return list;
    }
     
    /**
     * 获取xml文本中报文体内容
     * @param xml 查找的xml文本
     *
     * @return 报文体内容
     */
    public static String getXmlBodyText(String xml) {
        String regex = "<SvcCont>(.+?)</SvcCont>";
        Matcher m = Pattern.compile(regex, Pattern.DOTALL).matcher(xml);
        if (m.find()) {
            return m.group(1);
        } else {
            return null;
        }
    }

上一篇:java程序编译和运行
下一篇:JAVA制转换原理和补码存储方式
选择城市和中心
贵州省

广西省

海南省