码迷,mamicode.com
首页 > 编程语言 > 详细

Java正则表达式详解(三)

时间:2016-05-17 13:42:09      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:表达式   正则   java   

    正则表达式引擎是一种可以处理正则表达式的软件。许多语言都支持正则表达式处理文本,例如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;
		}
	}



本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1774276

Java正则表达式详解(三)

标签:表达式   正则   java   

原文地址:http://aku28907.blog.51cto.com/5668513/1774276

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!