Java编程之正则表达式

什么是正则表达式? java

正则表达式就是人为的定义一些规则,但愿计算机按照咱们制定的规则执行。正则表达式主要用于操做字符串 正则表达式

java.util.regex包主要包括如下三个类: app

  • Pattern类:
  • Matcher类:
  • PatternSyntaxException:

Pattern类:
Pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要建立一个Pattern对象,你必须首先调用其公共静态编译方法(Pattern p = Pattern.compile("a*b")),它返回一个Pattern对象。该方法接受一个正则表达式做为它的第一个参数。
Matcher类:
Matcher对象是对输入字符串进行解释和匹配操做的引擎。与Pattern类同样,Matcher也没有公共构造方法。你须要调用Pattern对象的matcher方法来得到一个Matcher对象(Matcher m = p.matcher("aaaaab"))。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。 函数

正则表达式的语法 ui

字符类
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否认)
[a-zA-Z] a到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]] a到d或m到p:[a-dm-p](并集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b和c:[ad-z](减去)
[a-z&&[^m-p]] a到z,而非m到p:[a-lq-z](减去)

预约义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

 

边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(若是有的话)
\z 输入的结尾

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或屡次
X+ X,一次或屡次
X{n} X,刚好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,可是不超过 m

注意:这里只列出了经常使用的一些语法,具体信息查看文档 搜索引擎

补充: spa

一、Pattern类的方法摘要 code

方法摘要
static Pattern compile(String regex)
将给定的正则表达式编译到模式中。
static Pattern compile(String regex, int flags)
将给定的正则表达式编译到具备给定标志的模式中。
int flags()
返回此模式的匹配标志。
Matcher matcher(CharSequence input)
建立匹配给定输入与此模式的匹配器。
static boolean matches(String regex, CharSequence input)
编译给定正则表达式并尝试将给定输入与其匹配。
String pattern()
返回在其中编译过此模式的正则表达式。
static String quote(String s)
返回指定String的字面值模式String。
String[] split(CharSequence input)
围绕此模式的匹配拆分给定输入序列。
String[] split(CharSequence input, int limit)
围绕此模式的匹配拆分给定输入序列。
String toString()
返回此模式的字符串表示形式。

二、Matcher类的方法摘要 对象

方法摘要
Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤。
StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤。
int end()
返回最后匹配字符以后的偏移量。
int end(int group)
返回在之前的匹配操做期间,由给定组所捕获子序列的最后字符以后的偏移量。
boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。
boolean find(int start)
重置此匹配器,而后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
String group()
返回由之前匹配操做所匹配的输入子序列。
String group(int group)
返回在之前匹配操做期间由给定组捕获的输入子序列。
int groupCount()
返回此匹配器模式中的捕获组数。
boolean hasAnchoringBounds()
查询此匹配器区域界限的定位。
boolean hasTransparentBounds()
查询此匹配器区域边界的透明度。
boolean hitEnd()
若是匹配器执行的最后匹配操做中搜索引擎遇到输入结尾,则返回 true。
boolean lookingAt()
尝试将从区域开头开始的输入序列与该模式匹配。
boolean matches()
尝试将整个区域与模式匹配。
Pattern pattern()
返回由此匹配器解释的模式。
static String quoteReplacement(String s)
返回指定String的字面值替换String。
Matcher region(int start, int end)
设置此匹配器的区域限制。
int regionEnd()
报告此匹配器区域的结束索引(不包括)。
int regionStart()
报告此匹配器区域的开始索引。
String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每一个子序列。
String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列。
boolean requireEnd()
若是不少输入均可以将正匹配更改成负匹配,则返回 true。
Matcher reset()
重置匹配器。
Matcher reset(CharSequence input)
重置此具备新输入序列的匹配器。
int start()
返回之前匹配的初始索引。
int start(int group)
返回在之前的匹配操做期间,由给定组所捕获的子序列的初始索引。
MatchResult toMatchResult()
做为 MatchResult 返回此匹配器的匹配状态。
String toString()
返回匹配器的字符串表示形式。
Matcher useAnchoringBounds(boolean b)
设置匹配器区域界限的定位。
Matcher usePattern(Pattern newPattern)
更改此Matcher用于查找匹配项的Pattern。
Matcher useTransparentBounds(boolean b)
设置此匹配器区域边界的透明度。

案例: 索引

package cc.enfp.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest
{
    /*
            正则获取
    Pattern p = Pattern.compile("a*b");
    Matcher m = p.matcher("aaaaab");
    boolean b = m.matches();
    
    一、首先按面向对象的思惟,把正则表达式封装成类Pattern,可是该类没有构造函数,只能经过他的静态方法获取该类的实例
    二、经过正则兑现获取匹配器,由于匹配器须要依靠正则表达式和字符串,因此说须要把字符串做为参数传递给匹配器对策方法
    三、经过匹配器的相应方法完成想要的操做
    */
    public static void main(String[] args)
    {
	String str = "huan ying lai guang lin";
	/**
	 * 查找出三个字母组成的单词
	 * 注意这里使用了转义字符'\\'表示'\'
	 */
	Pattern p = Pattern.compile("\\b[a-z]{3}\\b");
	Matcher m = p.matcher(str);
	while(m.find())
	{
	    System.out.println(m.group());
	}
    }
}


输出结果:
lai
lin
相关文章
相关标签/搜索