您的位置:首页 > 编程语言 > Java开发

JavaSE笔记之<正则表达式>

2015-07-04 15:15 579 查看
①正则表达式的语法:
下表显示了正则表达式的语法:表 1.1 正则表达式语法
元字符说明
.匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b
g”,但是不匹配“buug”。
$匹配行结束符。例如正则表达式“EJB$”能够匹配字符串“I like EJB”的末尾,但是不能匹配字符串“J2EE
Without EJBs!”。
^匹配一行的开始。例如正则表达式“^Spring”能够匹配字符串“Spring is a J2EE framework”的开始,但是不能匹配“I
use Spring in my project”。
*匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串。
/转义符,用来将元字符当作普通的字符来进行匹配。例如正则表达式/$被用来匹配美元符号,而不是行尾;正则表达式/.用来匹配点字符,而不是任何字符的通配符。
[]匹配括号中的任何一个字符。例如正则表达式“b[aui]g”匹配bug、big和bug,但是不匹配beg。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母。还有一个相配合使用的元字符“^”,用在这里并不像前边的那个“^”一样表示匹配行开始,而是表示“排除”,要想匹配除了指定区间之外的字符,就可以在左边的括号和第一个字符之间使用^字符,例如“[^163A-Z]”将能偶匹配除了1、6、3和所有大写字母之外的任何字符。
( )将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。
|将两个匹配条件进行逻辑“或”运算。'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配"zood" 或 "food"。
+匹配前面的子表达式一次或多次。例如正则表达式9+匹配9、99、999等。
?匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。此元字符还有另外一个用途,就是表示非贪婪模式匹配,后边将有介绍
{n}匹配确定的 n 次。例如,“e{2}”不能匹配“bed”中的“d”,但是能匹配“seed”中的两个“e”。
{n,}至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeeeed”中的所有“e”。
{n,m}最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。
字符类
[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输入的结尾
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个组。使用\n 其中n=0,1,2,3可以获得当前规则的第n个组 $n可以获得前一个规则的第n个组str.replaceAll("(.)\\1+", "$1");(.)表示组1 然后\1表示和组1一样的数据 $1使得组1向后引用,也等于(.)表示的一样的数据。该行代码用于删除重复字符。Pattern标记
CANON_EQ
CASE_INSENSITIVE(启用不区分大小写的匹配) ☆☆
[/code]
COMMENTS(模式中允许空白和注释)  ☆
[/code]
DOTALL
[/code]
LITERAL
[/code]
MULTILINE(启用多行模式,此时^、$匹配的是一行的行首和行尾,而不是输入序列的行首行尾)    ☆☆
[/code]
UNICODE_CASE
[/code]
UNIX_LINES
[/code]
②正则表达式的使用(匹配、切割split、替换replace)☆☆☆String str = "123344"; //要匹配的字符串1.把正则表达式封装成对象String reg = "//d+"; //正则表达式Pattern pattern = Pattern.compile(reg); //把正则表达式封装成对象2.创建匹配器,与要匹配的字符串相关联。通过调用模式的 
matcher
方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
matches
方法尝试将整个输入序列与该模式匹配(即和该模式要从头到尾都要匹配,即要输入序列要完全等于它)。
lookingAt
尝试将输入序列从头开始与该模式匹配。
find
方法扫描输入序列以查找与该模式匹配的下一个子序列(匹配的只是一个子序列,只要输入序列中有它即可,既可以通过循环可能可以找到多个这样的子序列)。每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。Matcher matcher = pattern.matcher(str);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: