`
hello_player
  • 浏览: 153667 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java 之正则表达式

    博客分类:
  • Java
阅读更多
package example.regularexpressions;

import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import junit.framework.TestCase;

public class Basics extends TestCase {
	
	/**
	 * Pattern类:
	 * Pattern类的静态方法compile用来编译正则表达式,在此[,\\s]+表示若干个","或者若干个空格匹配
	 * split方法使用正则匹配将字符串切割成各子串并且返回
	 * @throws Exception
	 */
	public void _test1() throws Exception {
		Pattern pattern = Pattern.compile("[,\\s]+");
		String[] result = pattern.split("one two  three,four , five,six");
		for (String str : result) {
			System.out.println(str);
		}
	}
	
	/**
	 * Matcher类:
	 * 注意,Matcher的获得是通过Pattern.matcher(CharSequence charSequence);输入必须是实现了CharSequence接口的类
	 * 常用方法:
	 * matches()判断整个输入串是否匹配,整个匹配则返回true
	 * lookingAt()从头开始寻找,找到匹配则返回true
	 * @throws Exception
	 */
	public void _test2() throws Exception {
		String str1 = "hello";
		Pattern pattern1 = Pattern.compile("hello");
		Matcher matcher1 = pattern1.matcher(str1);
		System.out.println("matcher1.matches()=>" + matcher1.matches());
		
		String str2 = "hello world";
		Pattern pattern2 = Pattern.compile("hello");
		Matcher matcher2 = pattern2.matcher(str2);
		System.out.println("matcher2.matches()=>" + matcher2.matches());
		System.out.println("matcher2.lookingAt()=>" + matcher2.lookingAt());
	}
	
	/**
	 * find()扫描输入串,寻找下一个匹配子串,存在则返回true
	 * @throws Exception
	 */
	public void _test3() throws Exception {
		Pattern pattern = Pattern.compile("hello");
		Matcher matcher = pattern.matcher("hello world, hello world, hello_world");
		StringBuffer sb = new StringBuffer();
		boolean find = matcher.find();
		while(find) {
			matcher.appendReplacement(sb, "haha");	//实现非终端添加和替换步骤
			find = matcher.find();
			System.out.println("sb=>" + sb);
		}
		matcher.appendTail(sb);		//实现终端添加和替换步骤
		System.out.println(sb.toString());
	}
	
	/**
	 * 匹配IP地址
	 * IP地址中的句点字符必须进行转义处理(前面加上“\”),因为IP地址中的句点具有它本来的含义,
	 * 而不是采用正则表达式语法中的特殊含义。句点在正则表达式中的特殊含义本文前面已经介绍。 
	 * 日志记录的时间部分由一对方括号包围。你可以按照如下思路提取出方括号里面的所有内容:
	 * 首先搜索起始方括号字符(“[”),提取出所有不超过结束方括号字符(“]”)的内容,向前寻找直至找到结束方括号字符。
	 * @throws Exception
	 */
	public void _test4() throws Exception {
		String logEntry = "192.168.0.1 - - [26/Feb/2009:14:56:43 -0500]\"GET /lsAlive/ht HTTP/1.0\"200 15\r\n"
			+"192.168.0.2 - - [25/Feb/2009:14:56:43 -0500]\"GET /lsAlive/ht HTTP/1.0\"200 15";
		String regexp = "([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})\\s-\\s-\\s\\[([^\\]]+)\\]";
		Pattern pattern = Pattern.compile(regexp);
		Matcher matcher = pattern.matcher(logEntry);
		boolean find = matcher.find();
		while(find) {
			MatchResult result = matcher.toMatchResult();
			System.out.println("IP=>" + result.group(1));
			System.out.println("Timestamp=>" + result.group(2));
			find = matcher.find();
		}
	}
	
	/**
	 * HTML处理
	 * 分析HTML页面内FONT标记的所有属性
	 * @throws Exception
	 */
	public void _test5() throws Exception {
		String html = "<font face=\"Arial Serif\" size=\"+2\" color=\"red\">";
		String regexForTag = "<\\s*font\\s+([^>]*)\\s*>";
		
		Pattern pattern = Pattern.compile(regexForTag, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(html);
		
		boolean find = matcher.find();
		
		String attribute = matcher.group(1);
		System.out.println("属性字符串为:" + attribute);
		
		String regexForAttribute = "([a-z]+)\\s*=\\s*\"([^\"]+)\"";
		Pattern pattern2 = Pattern.compile(regexForAttribute, Pattern.CASE_INSENSITIVE);
		Matcher matcher2 = pattern2.matcher(attribute);
		
		boolean find2 = matcher2.find();
		
		while(find2) {
			MatchResult result = matcher2.toMatchResult();
			System.out.println(result.group(1) + "=" + result.group(2));
			find2 = matcher2.find();
		}
	}
	
	/**
	 * HTML处理
	 * 修改一些页面中的链接
	 * @throws Exception
	 */
	public void test6() throws Exception {
		String url = "<a href=\"http://192.168.0.1:8080/test/index.jsp#test...\">"
			+ "< a href = \"http://192.168.0.1:8080/test/index.jsp#?hahahaha...\">";
		String regex = "(<\\s*a\\s+href\\s*=\\s*\"http://192.168.0.1:8080/test/index.jsp[^\"]+\">)";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(url);
		boolean find = matcher.find();
		System.out.println("find=>" + find);
		while(find) {
			MatchResult result = matcher.toMatchResult();
			String temp = result.group(1);
			System.out.println("替换前=>" + temp);
			temp = temp.replace("192.168.0.1", "localhost");
			System.out.println("替换后=>" + temp);
			find = matcher.find();
		}
	}
	
	/**
	 * 4种常用功能:
	 * 1、查询:
	 * 如果str中有regEx,那么rs为true,否则为flase。如果想在查找时忽略大小写,
	 * 则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
	 * @throws Exception
	 */
	public void _testQuery() throws Exception {
		String str = "abc efg ABC";
		String regEx = "a|f";
		Pattern pattern = Pattern.compile(regEx);
		Matcher matcher = pattern.matcher(str);
		boolean rs = matcher.find();
		System.out.println("rs=>" + rs);
	}
	
	/**
	 * 2、提取:
	 * 执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount();
	 * @throws Exception
	 */
	public void _testGet() throws Exception {
		String regEx = ".+\\\\(.+)$";
		String str = "c:\\dir1\\dir2\\name.txt";
		Pattern pattern = Pattern.compile(regEx);
		Matcher matcher = pattern.matcher(str);
		boolean rs = matcher.find();
		for (int i = 1; i <= matcher.groupCount(); i++) {
			System.out.println(matcher.group(i));
		}
	}
	
	/**
	 * 3、分割:
	 * @throws Exception
	 */
	public void _testSplit() throws Exception {
		String regex = "::";
		Pattern pattern = Pattern.compile(regex);
		String[] result = pattern.split("aa::bb::cc");
		for (String str : result)
			System.out.println("result=>" + str);
		
		System.out.println("---------");
		String[] normal = "aa::bb::cc".split(regex);
		for (String str : normal) 
			System.out.println("nornal=>" + str);
	}
	
	/**
	 * 4、替换(删除):
	 * 如果写成空串,既可达到删除的功能
	 * @throws Exception
	 */
	public void _testReplaceOrDelete() throws Exception {
		String regex = "a+";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher("aaabbced a ccdeaa");
		System.out.println("replaceFirst=>" + matcher.replaceFirst("A"));
		String result = matcher.replaceAll("A");
		System.out.println("replaceAll=>" + result);
		String delete = matcher.replaceAll("");
		System.out.println("替换为空即可达到删除的功能");
	}

	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
	}

	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
	}
	
}

 

分享到:
评论
2 楼 hello_player 2010-02-26  
是的,哈哈,以前看过一点,但要用的时候发现又忘了,只好再看一次花个半天的时间整理下做个备份
1 楼 llfzy 2010-02-26  
这是基础帖了。。。。

相关推荐

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

    为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...

    java使用正则表达式判断手机号的方法示例

    8. java正则表达式技巧大全:文章最后还提供了几个有关于java算法相关的内容,例如《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java...

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    Java正则表达式 Java 正则表达式

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    Java根据正则表达式生成字符串—Xeger,automaton

    在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    使用Java正则表达式分析处理日志

    本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...

    Java 使用正则表达式对象实现正则的获取功能

    Java 正则表达式对象实现正则获取功能 在 Java 中,使用正则表达式对象可以实现各种字符串匹配和提取操作。正则表达式对象主要通过 Pattern 和 Matcher 两个类来实现。下面详细介绍如何使用正则表达式对象实现正则...

    JAVA正则表达式大全

    1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,包括元字符、字符类、量词和分组。元字符如`.`代表任意字符,`^`表示行首,`$`表示行尾,`*`表示零次或多次,`+`表示一次或多次,`?`表示零次或一...

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java_zhengze.rar_正则表达式_正则表达式 java

    本资料"java_zhengze.rar"提供了对Java正则表达式的详细讲解,包括基本概念、元字符、预定义字符类以及各种匹配操作,对于Java开发者来说是一份非常实用的学习资源。 首先,我们来了解一下正则表达式的基石——元...

    Java正则表达式.ppt

    Java正则表达式虽然与其他语言的正则表达式有相似之处,但它们并不完全相同,有自己的语法和特性。使用Java正则表达式的好处在于它能显著提高编程效率,例如验证电子邮件地址这样的任务,传统方法可能需要大量的代码...

    常用java正则表达式

    ### 常用Java正则表达式知识点 #### 一、引言 正则表达式是一种强大的工具,用于处理文本并查找模式。多种编程语言,包括Perl、PHP、Python、JavaScript以及Java等均内置了对正则表达式的支持。本文将详细介绍Java...

    java正则表达式验证IP地址

    Java正则表达式验证IP地址 Java正则表达式验证IP地址是指使用Java语言中的正则表达式来验证IP地址是否符合标准。IP地址是指在网络通信中用来标识设备的地址,它是一种逻辑地址,通过它可以找到网络中的设备。在...

    使用Java正则表达式实现一个简单的身份证号码验证

    ### 使用Java正则表达式实现一个简单的身份证号码验证 #### 一、背景介绍 身份证号码是中国公民的身份标识,由15位或18位数字组成(早期为15位,后改为18位)。其中,第18位是校验码,可能是数字0~9或者大写字母X。...

    java Xeger 根据正则表达式生成满足的随机数据

    Xeger的工作原理是通过解析正则表达式,然后生成与之匹配的随机字符串。例如,如果你有一个正则表达式"^[a-zA-Z0-9]{5,10}$",它表示一个由5到10个字母或数字组成的字符串。Xeger会根据这个规则生成长度在5到10之间...

    java 正则表达式应用jar包 regex-smart.jar

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    java 使用正则表达式验证电话号码的格式

    java 使用正则表达式验证电话号码的格式 java 使用正则表达式验证电话号码的格式

    详解Java判断是否是整数,小数或实数的正则表达式

    在Java中使用正则表达式来判断字符串是否符合整数、小数或实数的格式是一种常见且有效的做法。在编程中,我们经常需要对输入的字符串进行格式验证,以确保它们符合预期的数值格式,尤其是在处理财务数据、用户输入...

Global site tag (gtag.js) - Google Analytics