Java正则表达式详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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正则表达式代码

Java正则表达式详解

Java正则表达式应用详解

Java 正则表达式详解

Java 正则表达式详解

Java 中正则表达式的详解