菜鸟成长日记:Java基础篇4 --- 正则表达式

一、初步认识

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,

这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串

从网上搜集了两个例子,感觉很好贴上

例一

this\s+is\s+text ---> this is text 
注意字符串中的 \s+。
匹配单词 "this" 后面的 \s+ 可以匹配多个空格,
之后匹配 is 字符串,
再之后 \s+ 匹配多个空格然后再跟上 text 字符串。

例二

^\d+(\.\d+)? ----> 2.21
^ 定义了以什么开始
\d+ 匹配一个或多个数字
? 设置括号内的选项是可选的
\. 匹配 "."
可以匹配的实例:"5", "1.5" 和 "2.21"。

所以一个字符串其实就是一个简单的正则表达式。

二、基本语法

.        任意一个字符串
\             "\\\\"匹配"\","\\("匹配"("。
^             匹配输入字符串开始的位置
$          匹配输入字符串结尾的位置
*        零次或多次匹配前面的字符或子表达式
+        一次或多次匹配前面的字符或子表达式
?        零次或一次匹配前面的字符或子表达式
{n}       n 是非负整数。正好匹配 n 次
{n,m}      匹配至少 n 次,至多 m 次。
{n,}         至少匹配 n 次
?            非贪心的"模式匹配搜索到的、尽可能短的字符串,
              而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串
              在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。
x|y          匹配 x 或 y。例如,‘z|food‘ 匹配"z"或"food"。‘(z|f)ood‘ 匹配"zood"或"food"。
[xyz]       匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。
[^xyz]        反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。

[a-z]            字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。
[^a-z]        反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。

\b           匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
\B           非字边界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
\d            数字字符匹配。等效于 [0-9]。
\D           非数字字符匹配。等效于 [^0-9]。

三、实例

 1 /**
 2  * 正则表达式测试
 3  * @author wangchong
 4  * @date 2017年9月29日 上午11:25:27
 5  */
 6 public class RegexMatches {
 7
 8     public static void main( String args[] ){
 9
10         System.out.println("测试 边界匹配器 $ and ^");
11
12         System.out.println("测试 \\");
13         System.out.println("abc\\".matches(".*\\\\$"));
14         System.out.println("测试 ^  ");
15         System.out.println("abc\\".matches("^a.*"));
16
17         System.out.println("实例一: 正则表达式筛选一段文字中的正确的手机号码");
18         System.out.println();
19
20         String messge = "尊敬的移动用户18352537674您好,您的账号132419255还剩余额111111";
21         System.out.println("信息内容:" + messge);
22         Pattern regex1 = Pattern.compile("\\D+(1\\d{10})\\D+");
23         Matcher matcher = regex1.matcher(messge);
24
25         while (matcher.find()) {
26             System.out.print("提取的手机号为:" + matcher.group(1));
27         }
28
29    }
30
31 }

运行结果

时间: 2024-08-28 16:53:06

菜鸟成长日记:Java基础篇4 --- 正则表达式的相关文章

java基础篇---I/O技术(三)

接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象输入流(ObjectInputStream).使用对象输出流输出序列化对象的步骤,有时也成序列化,而使用对象输入流读入对象的过程,有时也称为反序列化 一个对象产生之后实际上是在内存中为其开辟了一个存储空间,方便存储信息. 对象序列化就是把一个对象变成二进制的数据流的一个方法,通过对象序列化可以反驳的

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载

Java基础篇Socket网络编程中的应用实例

说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法. 要求:客户端通过Socket通信技术上传本地一

Java 基础篇之反射

Java 基础篇之反射 反射# 使用反射获取程序运行时的对象和类的真实信息. 获取 Class 对象# 每个类被加载之后,系统会为该类生成一个对应的 Class 对象,通过该 Class 对象可以访问到 JVM 中的这个类. 使用 Class 类的 forName(String clazzName) 静态方法.字符串参数的值是某个类的全限定类名,必须包含完整的包名 调用某个类的 class 属性 调用某个对象的 getClass() 方法.该方法是 java.lang.Object 类中的一个方

面试准备&总结-Java基础篇

在vps的服务器到期了,在hw又不能访问,直接在博客园写笔记了.  基础篇 1. 集合类的继承关系,源码实现原理,初始大小和如何增长. - list类初始大小10,加载因子为1,扩容到1.5+1.底层是个Object数组,调用 System.arraycopy进行拷贝. - Vector同上,扩容倍数是两倍,是同步的,线程安全. - HashMap初始大小16,加载因子0.75f,扩容到2倍.底层是数组+链表,调用resize()调整位置. - HashTable初始大小11,加载因子0.75f

java基础10:正则表达式与反射

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

JAVA基础篇八(Java,C++中的网络)

基础篇写到这里,C++和JAVA的基础知识也要讲完了,至于更深入的使用,则需要单独寻找每种语言特有的类库. 讲到网络,不可避免地要讲TCP/IP的基本使用方法.本文只对两种语言的网络实现做简单介绍,后续学习中如果有详细说明,会逐步添加到本文中. 1.C++网络知识 简单的TCP/IP: server端: #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") void

Java面试题(Java基础篇)

Java 基础 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境. 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具.简单来说:如果你需要运行 java 程序,只需安装 JRE 就