正则表达式入门

今天讲讲正则表达式,正则表达式在编程中是非常常用的一项技术,也是非常行之有效的技术,有了他,很多复杂的问题就变得的非常简单了,常见的用途有:字符串匹配(或者叫字符匹配)、字符串查找、字符串替换,典型应用有:用户注册时用户名和密码的验证、检测IP地址是否正确,从网页中揪出链接等等,从常见用途中我们看到,一言以蔽之,正则表达式就是对字符串的处理,所以正则表达式牵涉到的类有三个:java.lang.String、java.util.regex.Pattern、java.util.regex.Matcher,其实正则的用途和功能非常强大,今天老夫就写一些最基本的用法,其实那些高级用法也是从这些基本用法来的,今后看看有没有机会写一下高级用法(主要是老夫现在也不会,,,),下面我们来看看这些最基本的语法: 字符类 [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 空白字符:[ tnx0Bfr] 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 次 反斜线、转义和引用 反斜线字符 (”) 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \ 与单个反斜线匹配,而 { 与左括号匹配。 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。 根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "b" 与单个退格字符匹配,而 "\b" 与单词边界匹配。字符串字面值 "(hello)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\(hello\)"。 其实正则表达式的用法说说难不难,但说简单一点也不简单,下面是一个例子对以上的这些语法进行测试,当我们想不起来的时候,可以把这些例子拷出来跑一下,看一下效果就知道了 ...

April 6, 2015 · 2 min · 416 words · Bridge Li