Android知识Java学习笔记

Java正则表达式总结

2017-05-02  本文已影响181人  Sinchunk

基础

相对其他语言,Java对反斜线\有不同的处理。在其他语言中,\\表示“在正则表达式中插入普通的反斜线,所以不要给他任何特殊意义”,而在Java中,\\表示“插入一个正则表达式的反斜线,所以后面的字符具有特殊意义”。例如,Java中如果表示一个数字,那么正则表达式是\\d,而其他语言则是\d。

String中的正则表达式

String中有3个方法可以使用正则表达式,分别是

//判断字符串是否匹配正则表达式,匹配返回true,不然返回false
boolean matches(String regex)

//用给定的正则表达式切割字符串,注意与正则表达式匹配的部分,在最终结果中都不存在了
String[] split(String regex)
//限定切割次数
String[] split(String regex, int limit)

//替换所有匹配到的字符串
String replaceAll(String regex, String replacement)
//替换掉第一个匹配到的字符串
String replaceFirst(String regex, String replacement)

Pattern和Matcher

导入java.util.regex,然后用static Pattern.compile()方法来编译正则表达式。他会根据String类型的正则表达式生成一个Pattern对象,接下来把想要检索的字符串传入Pattern对象的matcher()方法,matcher()方法会生成一个Matcher对象,之后就可以调用Matcher对象里面的方法匹配。例如:

Pattern p = Pattern.compile("a*b");   //编译正则表达式
Matcher m = p.matcher("aaaaab");   //要检索的字符串
/**
*Attempts to match the entire region against the pattern.
*If the match succeeds then more information can be obtained via the start, end, and group methods.
*/
boolean b = m.matches();

下面的代码跟上面实现了同样功能

boolean b = Pattern.matches("a*b", "aaaaab");

CharSequence

接口CharSequence从CharBuffer、String、StringBuilder、StringBuffer类中抽象出了字符序列的一般化定义:

interface CharSequence {
  charAt(int i);
  length();
  subSequence(int start, int end);
  toString();
}

因此下面Pattern和Matcher的一些方法是以CharSequence对象作为参数。

Pattern

Patten类的定义

public final class Pattern
extends Object
implements Serializable

Pattern对象表示编译后的正则表达式。由于Pattern是final的,所以是不可变的,线程安全的。

一些常用的方法:

编译正则表达式
public static Pattern compile(String regex)
public static Pattern compile(String regex, int flags)

flags表示编译标记,一共有9种,他们都是final static int类型的,分别是

生成Matcher对象
public Matcher matcher(CharSequence input)
匹配操作
public static boolean matches(String regex, CharSequence input)
public String[] split(CharSequence input, int limit)
public String[] split(CharSequence input)

Matcher

Matcher类的定义

public final class Matcher
extends Object
implements MatchResult

Matcher是通过解释Pattern而在CharSequence上执行匹配操作的一个引擎。通过调用Pattern.matcher()方法可以生产一个Matcher对象。创建之后,Matcher对象就可以执行三种匹配操作:

这三个方法都返回boolean标志表明匹配成功或者失败。如果成功了就可以调用其他方法进行各种操作。

一些常用的方法:

匹配操作
/**
*Attempts to match the entire region against the pattern.
*If the match succeeds then more information can be obtained via the start, end, and group methods.
*
*Returns:
*true if, and only if, the entire region sequence matches this matcher's pattern
*/
public boolean matches()
/**
*Attempts to find the next subsequence of the input sequence that matches the pattern.
*This method starts at the beginning of this matcher's region, or, if a previous invocation of the method was successful and the matcher has not since been reset, at the first character not matched by the previous match.
*
*If the match succeeds then more information can be obtained via the start, end, and group methods.
*
*Returns:
*true if, and only if, a subsequence of the input sequence matches this matcher's pattern
*/
public boolean find()
public boolean find(int start)
/**
*Attempts to match the input sequence, starting at the beginning of the region, against the pattern.
*Like the matches method, this method always starts at the beginning of the region; unlike that method, it does not require that the entire region be matched.
*
*If the match succeeds then more information can be obtained via the start, end, and group methods.
*
*Returns:
*true if, and only if, a prefix of the input sequence matches this matcher's pattern
*/
public boolean lookingAt()
组(Groups)

组是用括号划分的正则表达式,可以根据组的编号来引用某个组。组号为0表示整个表达式,组号1表示被第一个括号括起的组,以此类推。例如:
A(B(C))D
中有3个组:组0是ABCD,组1是BC,组2是C。

//返回该匹配器的模式中的分组数目,第0组不包括在内。在group、start和end方法中可以使用小于此数目的数字作为numth参数
public int groupCount()

//返回前一次匹配(例如find())操作的第0组(整个匹配)
public String group()
//返回编号为num的捕获型括号匹配的内容,如果匹配成功,但是指定的组没有匹配输入字符串的任何部分,则将会返回null
public String group(int group)
public String group(String name)

//返回这个匹配起点的绝对偏移值,start()就等于start(0)
public int start()
//返回编号为第group的捕获型括号所匹配文本的起点在目标字符串中的绝对偏移值——即从目标字符串起始位置开始计算的偏移值。如果匹配型括号没有参与匹配,则返回-1
public int start(int group)

public int end()
//放回在前一次匹配操作中寻找到的组的最后一个字符索引加一的值
public int end(int group)
查找与替换
public String replaceAll(String replacement)
public String replaceFirst(String replacement)

public static String quoteReplacement(String s)
设置与修改的方法
//返回的MatchResult对象封装了当前匹配的信息。
public MatchResult toMatchResult()
//更改为新的Pattern对象
public Matcher usePattern(Pattern newPattern)
//返回目前所用的Pattern对象
public Pattern pattern()
//重置回原来整个字符串
public Matcher reset()
//设置新的字符串
public Matcher reset(CharSequence input)
//设置新的字符检索范围
public Matcher region(int start, int end)
//返回当前字符检索范围起始
public int regionStart()
//返回当前字符检索范围结束
public int regionEnd()
public Matcher useAnchoringBounds(boolean b)
public boolean hasAnchoringBounds()
public Matcher useTransparentBounds(boolean b)
public boolean hasTransparentBounds()
只读属性
上一篇 下一篇

猜你喜欢

热点阅读