把每天当成最后一天来释放自己

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  2 随笔 :: 4 文章 :: 1 评论 :: 0 Trackbacks

什么是正则表达式?

 概念:维基百科上是这样定义的:

       正则表达式英语Regular Expressionregexregexp,缩写为RE),也译为正规表示法常规表示法,在计算机科学中,

             是指一个用来描述或者匹配一系列符合某个
句法规则的字符串的单个字符串。正则表达式这个概念最初是由Unix中的工具软件

           (例如
sedgrep)普及开的。

   上面定义可以简化为:正则表达式是持有某个句法规则的单个字符串。


      这样对正则表达式的认识就明朗了很多。

1. 它是字符串

2. 它持有句法规则

  那什么是句法规则?

     说白了,句法规则就是特殊符号,表达匹配意义的符号。如果你知道这些特殊符号都能匹配什么字符,你就掌握了正则表达式!

我们先来看看一般字符是什么样子的:


x

字符 x

\\

反斜线字符

\0n

带有八进制值 的字符 n (0 <= n <= 7)

\0nn

带有八进制值 的字符 nn (0 <= n <= 7)

\0mnn

带有八进制值 的字符 mnn0 <= m <= 30 <= n <= 7

\xhh

带有十六进制值 0x 的字符 hh

\uhhhh

带有十六进制值 0x 的字符 hhhh

\t

制表符 ('\u0009')

\n

新行(换行)符 ('\u000A')

\r

回车符 ('\u000D')

\f

换页符 ('\u000C')

\a

报警 (bell) 符 ('\u0007')

\e

转义符 ('\u001B')

\cx

对应于 x 的控制符



上面都是一般的字符,它们不要我们要研究的对象,它们没有特殊的匹配意义,它们只能匹配自己,例如:



正则表达式

匹配字符

t

t

\n

\n

\\\\

\\



 

    也许你看出来了,怎么最后一个例子不是自己匹配自己啊?是“\\\\”匹配“\\”。

    这是因为 “\\”在Java正则表达式中有特殊意义。在Java中(注意只是在Java中,在其它语言中并不是这样的)

    “
\\”表示我要插入一个正则表达式反  斜杠,紧跟其后的符号有特殊意义,要小心啊。比如:要匹配1-9的单数字,

    我们要这样写“
\\d”,那既然“\\”有特殊意义,我们就不能拿它来匹配它本身了,于是就只能用“\\\\”来匹配“\\”这个反斜杠了。

    下面表格是一些特殊符号,上面字符只能匹配自己,应该是模糊匹配吧,它们能匹配不只一个字符,在这里要抛出一个关键词-字符类。


  什么是字符类?

    字符类有一个共同特点-用来匹配且只能匹配单个字符。它们不像数量词是为了说明或是限制字符的次数的,

    它们就是为了匹配字符的,其中还有一些预定义字符类,
它们是为了方便使用常用字符类而预定义的字符类。


功能

特殊符号

描述

字符类(用于匹配单个字符)

字符类

[]

[abc]

a或 c(简单类)

[^abc]

任何字符,除了 a或 c(否定)

[a-zA-Z]

a到 或 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a到 或 到 p[a-dm-p](并集)

[a-z&&[def]]

d或 f(交集)

[a-z&&[^bc]]

a到 z,除了 和 c[ad-z]差集

[a-z&&[^m-p]]

a到 z,而非 到 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]

次数匹配(X表示单个字符或字符组)

Greedy 数量词

X?

X*

X+

X{n}

X{n,}

X{n,m}

Reluctant数量词

X??

X*?

X+?

X{n}?

X{n,}?

X{n,m}?

Possessiv数量词

X?+

X*+

X++

X{n}+

X{n,}+

X{n,m}+

边界匹配

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

 

    上面是用来匹配字符或是对字符的限制,那如何把它些字符串起来,行成一个字符序列,要用到逻辑运算符:


XY

X后跟 Y

X|Y

X或 Y

(X)

X,作为捕获组



    逻辑运算符中最后一项提到捕获组,那什么是捕获组?

    有关组和捕获推荐一篇文章,很详细:

       http://blog.csdn.net/lovingprince/archive/2008/08/06/2774819.aspx 

posted on 2011-03-12 11:43 风的方向 阅读(177) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: