首页 > 代码库 > Java学习之正则表达式

Java学习之正则表达式

  Java正则表达式字符串模式。

  正则表达式可以用来搜索、编辑和处理文本。

  正则表达式不尽限于一种语言,但在每一种语言中又细微的差别。

java.util.regex包中主要有这3个类:

  • Pattern类:

    pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher类:

    Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。

  • PatternSyntaxException:

    PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

捕获组

捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

例如,正则表达式(dog) 创建了单一分组,组里包含"d","o",和"g"。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

可以通过调用matcher对象的groupCount方法来查看表达式有多少个分组。groupCount方法返回一个int值,表示matcher对象当前有多个捕获组。

还有一个特殊的组(组0),它总是代表整个表达式。该组不包括在groupCount的返回值中。

技术分享

正则表达式语法:用符号来描述书写规则: /中间写正则表达式/     |:代表或者    ():优先级

字符 说明
\

将下一字符标记为特殊字符、文本、反向引用、八进制的转义符。例如“n”匹配“n”,“\n”匹配换行符

“\t”匹配制表符,“\(”匹配“(”

^ 匹配开头;/^ve/ 匹配以ve开头的
$ 匹陪结尾 ;/ve$/  以ve结尾的
\d 任意一个数字
\D 非数字字符匹配。等效于 [^0-9]。
\w 任意一个数字或字母
\s 任意字符串
{n} 把左边的表达式重复n遍
{m ,n}   把左边的表达式重复至少m遍,至多n遍
{m,} 把左边的表达式重复至少m遍,至多不限
+ 左边的表达式,至少出现一次,至多不限,相当于{1,}
* 左边的表达式,至少出现0次,至多不限,相当于{0,}
左边的表达式,至少出现0次,至多1次,相当于{0,1}
[a,b,c] 只能取方括号中内容之一,[a-z]从a~z之间取任取一个字母,[1-9]从1~9数字中任取一个
. 匹配除"\r\n"之外的任何单个字符
[^xyz] 反向字符集。匹配未包含的任何字符
\b 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"
\B 非字边界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
\cx 匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。
\f 换页符匹配。等效于 \x0c 和 \cL。
\r 匹配一个回车符。等效于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。
\w 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
\W 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
\un 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (?)。

Matcher类的方法

索引方法

索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配:

 

序号方法及说明
1 public int start() 
返回以前匹配的初始索引。
2 public int start(int group)
 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
3 public int end()
返回最后匹配字符之后的偏移量。
4 public int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。

技术分享

 

研究方法

研究方法用来检查输入字符串并返回一个布尔值,表示是否找到该模式:

 

序号方法及说明
1 public boolean lookingAt() 
 尝试将从区域开头开始的输入序列与该模式匹配。
2 public boolean find() 
尝试查找与该模式匹配的输入序列的下一个子序列。
3 public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
4 public boolean matches() 
尝试将整个区域与模式匹配。

技术分享

 

Java学习之正则表达式