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;
		}
	}
时间: 2024-10-12 04:29:46

Java正则表达式详解(三)的相关文章

Java 正则表达式详解_正则表达式

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

Java 正则表达式详解

摘自:http://www.jb51.net/article/16829.htm 许多语言,包括 Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替 换”功能.那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它. 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Ap

Java正则表达式详解

本文为转载文章,因为实在写的太好了,所以就拿过来使用了 在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式.正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性.在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛. 正则表达式的引擎已被许多普通的Unix工具所实现,包括gr

Java正则表达式详解 [转]

文章转自:http://lzjold3.blog.163.com/blog/static/1061381201122595832958/ 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式. 许多语言,包括Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本

Java学习系列(二十四)Java正则表达式详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45501777 前言 正则表达式可以说是用来处理字符串的一把利器,它是一个专门匹配n个字符串的字符串模板,本质是查找和替换.在实例演示之前先了解一下Pattern.Matcher这两个工具类,Pattern:编译好的带匹配的模板(如:Pattern.compile("[a-z]{2}");/ / 取2个小写字母):Matcher:匹配目标字符串后产生的结果(如:pattern.m

Java线程详解(三)

Java线程:新特征-有返回值的线程 在Java5之前,线程是没有返回值的,常常为了"有"返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口. 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 下面是个很简单的例子: import jav

Java 正则表达式详解(二)

Java常用正则表达式     匹配中文字符的正则表达式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了  匹配双字节字符(包括汉字在内):[^x00-xff]  评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)  匹配空白行的正则表达式:ns*r  评注:可以用来删除空白行  匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />  评注:网上流传的版本太糟糕,上面这个也仅仅能匹配

Java 正则表达式详解(一)

正则表达式(regular expression)描述了一种字符串匹配的语法规则. (1)普通字符 最简单的正则表达式是一个单独的普通字符,它在匹配一个字符的时候,匹配与其相同的一个字符.普通字符由所有哪些未显示指定为元字符的打印和非打印字符组成.字母.数字.汉字.下划线,以及没有特殊定义的标点符号,都是普通字符.这包括所有的大写A~Z和小写a-z,所有数字0-9,所有标点 (2)特殊字符 特殊字符,就是一些有特殊含义的字符,通常都是正则表达式语法中规定的匹配字符.