正则表达式看似简单,要灵活使用却很难,至少我感觉是这样,(可能是做少了练习),你说要你写个邮件的正则表达式什么的,你都总是出错,别人怎么看你?唉,我当初公司评级考试的时候,就是写错了,导致严重后果啊。我能说什么呢,向谁去说呢,自己确实没学好,老忘记,对^$的恐惧感,那些简单的\d、\w、\s的意思都记不住或者记不清,导致不敢用。学业不精啊,误己误人!
参照 http://blog.csdn.net/allwefantasy/article/details/3136570
位于 java.util.regex 下,提供一些列很有用很强大的正则表达式处理接口:
接口
MatchResult 此接口包含用于确定与正则表达式匹配结果的查询方法。通过 MatchResult 可以查看匹配边界、组和组边界,但是不能修改。
匹配边界、组和组边界 ???????
类
Matcher
public final class Matcher extends Object implements MatchResult通过解释 Pattern 对 character sequence 执行匹配操作的引擎。 —————————— 这就是‘引擎’!!!
可以使用它执行三种不同的匹配操作:
matches 方法尝试将整个输入序列与该模式匹配。 —————————————— 注意:需要匹配整个区域
lookingAt 尝试将输入序列从头开始与该模式匹配。 与 matches 方法类似,此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
与 matches 方法类似,此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
每个方法都返回一个表示成功或失败的布尔值
Pattern ———————————————————————————————————————————————————————————————————————————————————————————— 通过compile(String regex, int flags) 来建立匹配模式,无构造方法
public final class Pattern extends Object implements Serializable 正则表达式的编译表示形式。
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象
异常
PatternSyntaxException
1.1 句点符号
1.2 方括号符号
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配
正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符 —————————————— !!!!!!!!!!!!
1.3 “或”符号
如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。
要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方括号,
因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。—————————— ()威力大!
1.4 表示匹配次数的符号
表一显示了表示匹配次数的符号,这些符号用来确定紧靠该符号【左边】的符号出现的次数
* 0或多次
+ 1或多次
?0或1次
{n} 恰好n次 ______ 注意是花括号 {}!!!!!
{n,m} 从n到m次都可以,m>n—————————— 或者说:至少 n 次,但是不超过 m 次
在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。
因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”
1.5 “否”符号
“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。例如,图四的正则表达式匹配所有单词
匹配所有单词,但“X”开头的除外—————— [^x][a-z]+
:注意,下面只会去尝试匹配一个字符
“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符
\S 上者的非
\d 数字0-9
\D
\w 单词字符:[a-zA-Z_0-9] 就是字母、数字
\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 次
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为【捕获组】 —————————— 这个概念很重要
Back 引用
\n 任何匹配的 nth 捕获组
引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到 \E
\E Nothing,但是结束从 \Q 开始的引用
特殊构造(非捕获)
(?:X) X,作为非捕获组
(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
的非捕获组 (?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组
usePattern(Pattern newPattern) 更改此 Matcher 用于查找匹配项的 Pattern。
public String group(int i)返回上次匹配操作的某个group。如果匹配成功,但是没能找到group,则返回null。