TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
主要撰写学习正则表达式的笔记,忘记从谁哪里学习的了,资料来源于网上,经过自己加工润色罢了,可以说是原创,也可以说不是原创,这些无所谓,
重要的是:学习过、记录过、分享过。
课程摘要 正则表达式可以用来:
1)验证字符串是否符合指定特征。
2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
3)用来替换,比普通的替换更强大。 正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文章或者课程没有做到由浅入深地讲解,概念上没有注意先后顺序,给大家的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的
为了使您更容易理解,本课程从最简单的概念开始讲解,再逐步进行深入。如果您是一名初学者,本课程将帮助您快速地入门正则表达式。如果你使用过正则表达式,并且有一定的经验,学习一下本课程,您将会发现一些曾被忽略的重要技巧。
徒弟:师傅呀,我接到新任务,要过滤字符串,进行筛选,一个个对比,貌似好麻烦哟!
师傅:都什么年代啦,你的效率低不低呀?用正则吧,,谁用谁知道好!
1、什么是正则表达式
在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
参考网址:http://baike.baidu.com/view/94238.htm
2、功能强大的文本处理语言
正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。
3、相对传统文本处理的优势:
1)、灵活
2)、高效
3)、强大
4)、便捷
4、正则表达式实例
实例一:
验证数字字符串
要求:验证一个字符串是否全部由数字构成
看个例子:
传统的编程方式:
- public class GeneralNumTest {
- public static void main(String[] args) {
- String[] values = new String[] { "10", "325678", "987799", "99999","amd", "nvdita", "86BF" };
- for (String value : values) {
- System.out.println("校验值: " + value);
- if (isOctNumber(value)) {
- System.out.println("[" + value + "] 校验是数字");
- }
- if (isHexNumber(value)) {
- System.out.println("[" + value + "] 校验是 16进制数字");
- }
- }
- }
- //16进制校验
- private static boolean isHexNumber(String value) {
- boolean result = true;
- for (int i = 0, j = value.length(); i < j; i++) {
- char c = value.charAt(i);
- if (c == "0" || c == "1" || c == "2" || c == "3" || c == "4" || c == "5" || c == "6"
- || c == "7" || c == "8" || c == "9"|| c == "a" || c == "b" || c == "c" || c == "d"
- || c == "e" || c == "f"|| c == "A" || c == "B" || c == "C" || c == "D" || c == "E"
- || c == "F") {
- continue;
- }else{
- result = false;
- break;
- }
- }
- return result;
- }
- // 传统校验方式
- private static boolean isOctNumber(String value) {
- boolean result = true;
- for (int i = 0, j = value.length(); i < j; i++) {
- char c = value.charAt(i);
- if (c == "0" || c == "1" || c == "2" || c == "3" || c == "4"|| c == "5" || c == "6"
- || c == "7" || c == "8" || c == "9") {
- continue;
- }else{
- result = false;
- break;
- }
- }
- return result;
- }
- }
复制代码 运行结果,这里就不展示了。
正则表达式对数字字符串验证的解法:
- public class GeneralNumTest {
- public static void main(String[] args) {
- String[] values = new String[] { "10", "325678", "987799", "99999","amd", "nvdita", "86BF" };
- for (String value : values) {
- System.out.println("校验值: " + value);
- if (isOctNumber(value)) {
- System.out.println("[" + value + "] 校验是数字");
- }
- if (isHexNumber(value)) {
- System.out.println("[" + value + "] 校验是 16进制数字");
- }
- }
- }
- private static boolean isHexNumber(String value) {
- String validateRegx = Regexes.HEX_NUM_REGEX;
- return value.matches(validateRegx);
- }
- private static boolean isOctNumber(String value) {
- String validateRegx = Regexes.OCT_NUM_REGEX;
- return value.matches(validateRegx);
- }
- }
- //依赖的Regexes:
- class Regexes {
- public static final String OCT_NUM_REGEX = "\d+";
- public static final String HEX_NUM_REGEX = "(?i)[0-9a-f]+";
- }
复制代码 运行结果:
校验值: 10
[10] 校验是数字
[10] 校验是16进制数字
校验值: 325678
[325678] 校验是数字
[325678] 校验是16进制数字
校验值: 987799
[987799] 校验是数字
[987799] 校验是16进制数字
校验值: 99999
[99999] 校验是数字
[99999] 校验是16进制数字
校验值: amd
校验值: nvdita
校验值: 86BF
[86BF] 校验是16进制数字
实例二:
验证email地址
要求:验证一个字符串是否合法的email地址
- public class EamilTest {
- public static void main(String[] args) {
- String[] emails = new String[] { "testone@163.com","tt.one.next@163.com", "www.163.com@163-com.com",
- ".leemaster@163", "luckdog.com" };
- for(String email:emails){
- System.out.println("验证的eamil是:"+email);
- if(isValideEmail(email)){
- System.out.println("["+email+"] 是有效的邮件地址");
- }
- }
- }
-
- private static boolean isValideEmail(String email) {
- return email.matches(Regexes.EMAIL_REGEX);
- }
- }
- class Regexes {
- public static final String OCT_NUM_REGEX = "\d+";
- public static final String HEX_NUM_REGEX = "(?i)[0-9a-f]+";
- public static final String EMAIL_REGEX =
- "(?i)(?<=\b)[a-z0-9][-a-z0-9_.]+[a-z0-9]@([a-z0-9][-a-z0-9]+\.)+[a-z]{2,4}(?=\b)";
- }
复制代码 运行结果:
验证的eamil是:testone@163.com
[testone@163.com] 是有效的邮件地址
验证的eamil是:tt.one.next@163.com
[tt.one.next@163.com] 是有效的邮件地址
验证的eamil是:www.163.com@163-com.com
[www.163.com@163-com.com] 是有效的邮件地址
验证的eamil是:.leemaster@163
验证的eamil是:luckdog.com
源码下载:http://file.javaxxz.com/2014/10/31/000032125.zip |
|