Java 正则表达式

正则表达式是一个特殊的字符序列,有助于你用一种专门的语法模式来匹配或找到其他字符串或字符串集。他们可以用来搜索、编辑或是操纵文本和数据。Java 提供了 java.util.regex 包来与正则表达式进行模式匹配。

正则表达式:符合一定规则的表达式。

作用:用于专门操作字符串。

特点:用一些特定的符号来表示一些代码的操作.这样就简化书写。所以学习正则表达式就是学习一些特殊符号的使用。

好处:可以简化对字符串的操作。

弊端:符号定义越多,正则越长,阅读性越差。

Java JDK 1.40版本包含了java.util.regex(一个完全开放、自带的正则表达式包)

在regex包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。

Pattern类是用来表达和陈述所要搜索模式的对象,Matcher类是真正影响搜索的对象。另加一个新的异常类,PatternSyntaxException,当遇到不合法的搜索模式时,会抛出异常。

java.util.regex

类 Pattern(final):正则表达式的编译表示形式。

static Pattern compile(String regex)

将给定的正则表达式编译到模式中。

java.util.regex

类 Matcher(final):通过解释 Pattern 对 character sequence 执行匹配操作的引擎。

int end()

返回最后匹配字符之后的偏移量(最后但不包括的索引)。

int start()

返回以前匹配的初始索引。

String group()

返回由以前匹配操作所匹配的输入子序列。

具体操作功能:

1.匹配 boolean matches(String regex)

告知此字符串是否匹配给定的正则表达式。

用规则匹配整字符串,只要有一处不符合规则,就匹配结束,返回false

2.切割 String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

3.替换 String replaceAll(String regex, String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

String replaceFirst(String regex, String replacement)

使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

4. 获取: 将字符串中符合规则的子串取出来。

操作步骤:

(1)将正则表达式封装成对象;

(2)让正则对象与要操作的字符串关联;

(3)关联后,获取一个正则匹配引擎(匹配器);

(4)通过引擎(匹配器)对符合规则的子串进行操作,比如取出。

import java.util.regex.*;

class RegexDemo

{

public static void main(String[] args)

{

getDemo();

}

public static void getDemo()

{

String str = "ming tian jiu yao fang jia le,hao bang!";

System.out.println(str);

String regex = "\\b[a-z]{4}\\b";// 查找四个单词的子字符串

// 将规则封装成对象。

Pattern p = Pattern.compile(regex);

// 让正则对象与要操作的字符串关联,返回一个匹配器。

// Matcher matcher(CharSequence input)。String实现了字符序列接口CharSequence

Matcher m = p.matcher(str);

// 通过引擎(匹配器)对符合规则的字符串进行操作,例如引擎对象的方法 matches()

//System.out.println(m.matches());

while (m.find())// 将规则作用到字符串上,并进行符合规则的子串查找。

{

System.out.println(m.group());// 用于获取匹配后的结果

System.out.println(m.start() + "...." + m.end());

}

}

}

原文发布于微信公众号 - 程序员阿凯(AKBC159)

原文发表时间:2016-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEE

String类相关面试题很难?不要方,问题不大前言:一、字符串的创建:二、字符串的拼接:三、intern方法:总结:

Java中有一个String类,特别让人伤脑筋。因为它可以直接赋值,也可以new一下用构造器生成对象,还可以用加号拼接……这些不同的方式到底有什么区别?本文是个...

2505
来自专栏IT可乐

Java的深拷贝和浅拷贝

  关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷...

3666
来自专栏别先生

Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因...

3645
来自专栏Python自动化测试

python的字符串学习(三)

学习Python语言,不得不学习在Python中,对字符串的处理,事实上,在Str类中提供了很多的方法来对字符串的处理,比如我们经常见的字符串的大小小写的处理,...

1093
来自专栏landv

Java基本语法

1641
来自专栏静晴轩

Javascript数组操作

使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间;思虑下,堪能如此...

7018
来自专栏码云1024

JAVA 第二天 关键字

2937
来自专栏noteless

[十二]基础数据类型之String

而对于字符的序列,也就是多个char, 这么一种东西, 使用CharSequence这个接口来描述

1162
来自专栏猿人谷

C++重要知识点小结---1

1.C++中类与结构的唯一区别是:类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。 2....

1959
来自专栏Kevin-ZhangCG

[ Java面试题 ]基础篇之一

2165

扫码关注云+社区

领取腾讯云代金券