黑马程序员 Java正则表达式,详解反斜线在Java中的作用
---------------------- ASP.Net+Android+IO开发S、 .Net培训、期待与您交流! ----------------------
在程序设计过程中,经常需要对获取的数据进行检查是否符合特定的格式,如此频繁地对数据进行检查使用人工检查简直就是灾难,而自己编写程序检查又显得非常麻烦。比如检查一个输入的电子邮件地址是否正确,自己编程实现检查操作至少需要10行代码并且效率也不一定很好,这时候咋办?正则表达式!!
验证邮箱地址的合法性
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class RegexTest { public static void main(String[] args) {
String mialAddress = "";
boolean bool = false;
BufferedReader bufIn = null;
System.out.print("Please input your Email :");
String reg = "[a-zA-Z0-9-_.]+@[a-zA-Z-1-9]+(\\.[a-zA-Z]+){1,3}";
do {
bufIn = new BufferedReader(new InputStreamReader(System.in));
try {
mialAddress = bufIn.readLine().trim();
} catch(IOException e) {
e.printStackTrace();
}
bool = mialAddress.matches(reg);
System.out.println(bool);
if(!bool)
System.out.println("Error! Please try again :");
} while(!bool);
}
}
上面的小程序让用户输入一个邮箱地址,经检查之后输出结果,如果为合法的地址则程序结束,如果非常则再循环一次重新输入直至正确为止。
上面可能陌生的只有两点,一是字符串reg的规则即正则表达式声明规则,二是String类的matches方法。
String类的matches方法其实也很简单,就是告知此字符串是否匹配给定的正则表达式,其底层是这样实现的,
Pattern.matches(regex, str)
Pattern类
Pattern类是正则表达式的编译表示形式,该类没有构造方法,要想获取该类对象可通过其静态方法compile。Pattern类的一个方法matcher可获得匹配器又称为匹配引擎Matcher。
Pattern类的实例不可变,可供多个并发线程安全使用。Matcher类的实例用于此目的则不安全。
Matcher类
Matcher中提供了对字符串的匹配,替换,切割,获取四大功能,学习正则表达式除了表达式声明规则,这个类的各种方法也是要重点了解的。
反斜线‘\ ’转义和引用
在初期运用正则表达式的时候可能竟然因为对‘\‘不理解而产生不必要的错误,这个字符在Java中是非常特殊的,它的作用就是转义和引用。
引用:反斜线用于引用其他将被解释为非转义构造的转义字符,这话的确很拗口,仔细分析其实是不难理解的,比如想要声明一个内容为一对英文符号的双引号的字符串,也就是””,那么如何声明呢?如果直接这样声明
String str = “”””;
编译器是肯定不通过的,因为在Java中双引号是转义字符,也就是说单一个双引号表示的并非其原意,那么我们如何声明呢?其实很简单只要改成这样就解决了。
String str = “\”\””;
我们要将一个双引号原本的意思表示出来使用反斜线即可,也就是说”在JVM中被认作为字符串的声明符号类似于操作运算符,而前面加上一个反斜线\就是告诉JVM我要双引号的文本意思(也就是上面那句话中的解释为非转义构造),即一个符号。
转义:反斜线同时也可以用于引用转义构造,举一个最简单的例子,n原本没有任何其他意思,也就是非转义字符,而前面加上\,变为\n就代表一个换行符,这时反斜线就把n“转义“了,注意这里的\n是事先声明过的,如果来一个\v在编译时就会报错。在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否是非转义构造的一部分。当然如果要解释非转义的其本身,可以这样\\
IP地址检验合法性
这里要求是根据windows系统错误提示推断的,可能有一定误差,不过万变不离其宗,只要掌握了核心思想,再怎么变化也不怕。该程序实现的IP格式要求如下:
(1-223).(0-255).(0-255).(0-255) 例如122.201.53.56是合法的,而225.15.15.15就是不合法的。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class CheckIPAddressTest {
public static void main(String[] args) {
String ipAddress = "";
boolean bool = false;
BufferedReader bufIn = null;
System.out.print("Please input IPAddress :");
String reg =
"^([1-9]|[1-9]\\d|1\\d{2}|2[0-1]\\d|22[0-3])\\." +
"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\." +
"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\." +
"(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$";
do {
bufIn = new BufferedReader(new InputStreamReader(System.in));
try {
ipAddress = bufIn.readLine().trim();
} catch(IOException e) {
e.printStackTrace();
}
bool = ipAddress.matches(reg);
System.out.println(ipAddress);
System.out.println(bool);
if(!bool)
System.out.println("Error! Please try again :");
} while(!bool);
}
}
这个程序是根据上面那个检验邮箱地址程序稍作修改得到的,不过这里的正则表达式声明稍微费点事情。我总感觉这个正则表达式有点长,程序执行起来未必有自己实现代码高效,大家可以自己用比较运算方式实现这个程序,比较一下各自花费的时间长短。
黑马程序员 Java正则表达式,详解反斜线在Java中的作用的更多相关文章
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Java 正则表达式详解
Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Java 集合详解 | 一篇文章解决Java 三大集合
更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...
- Java基础学习总结(35)——Java正则表达式详解
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- 【转】Java 正则表达式详解
正则表达式30分钟入门教程 常用正则表达式 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单. 如果你不熟悉这个术语,那么“正则表达式”(R ...
- 程序员必备:详解XSS和CSRF
做开发的小伙伴想必都不陌生XSS 和 CSRF,但也有一些刚接触的朋友还不是很清楚,今天就给大家详解下XSS和CSRF! 一.XSS xss,即 Cross Site Script,中翻译是跨站脚本攻 ...
- Java正则表达式详解+练习
一.导读 正则表达式,又称规则表达式.(英文名Regular Expression,所以代码中常以regex.regexp.RE表示).正则表达式简单说就是用于操作文本数据的规则表达式,在Java中我 ...
- Java正则表达式详解教程
public class Test { private static Scanner scanner; public static void main(String[] args) { scanner ...
随机推荐
- 使用Qt Style Sheets制作UI特效
引言 作为一套GUI框架,Qt是非常强大的.(注:Qt 不仅是一套优秀的GUI框架,同时也是一套出色的应用程序框架).在UI的制作方面Qt为广大开发者提供了一套强大而易用的工具,她就是——Qt Sty ...
- 关于sys、system、sysman等在EM中登录的问题
1.sysman要先在SQL*Plus上解锁: (1)以"sysdba"的身份登录 conn system/密码 as sysdba; (2)解锁 alter user sysma ...
- CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27
CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27 说明: 操作系统:CentOS 6.8 32位 准备篇: 一.系统约定 软件源代码包存放位 ...
- nignx日志格式
web-master的nginx格式: log_format web_format '$remote_addr $remote_port $remote_user [$time_local] ' '& ...
- .NET基础拾遗(4)委托和事件1
一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执行它所“持有”的方法. (2)如何使用委托? ①声明委托类型(delegate关键字) ...
- [转载]C#开源项目(国外的还是很多)
C#开源项目(国外的还是很多)一.Ajax框架Ajax.NET Professional (AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一.它在客户端脚本之上创建代理 ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- 交叉编译安装ARM平台上的Qt
一.宿主机环境搭建: 编译需要x11库的支持,在Ubuntu下安装命令: sudo apt-get install libx11-dev libxext-dev libxtst-dev 二.下载源码包 ...
- C#中KeyDown和KeyPress区别
1.比如说TexBox 输入'a' 按下->触发KeyDown事件,然后去处理 ->将a显示输入到文本框后 ->触发KeyPress事件
- 从配置文件中读取数据获取Connection
配置文件 db.driver=com.mysql.jdbc.Driver db.url=jdbc\:mysql\://localhost\:3306/mybase db.user=root db.ps ...