当前位置: 代码迷 >> 编程 >> 正则示意学习总结
  详细解决方案

正则示意学习总结

热度:8002   发布时间:2013-02-26 00:00:00.0
正则表示学习总结

[]:要匹配的内容的范围

         直接要匹配的内容写入[]中间即可

         eg:在所有的信息中匹配1,2,3,4出现的位置,写成[1234]

- :表示连续,(是减号,并非下划线)

eg:你要匹配所有的英文字母,用上面的写法太麻烦了,使用-将会很简单做到,就可以写成[A-Za-z]就行了,注意x  - y其中x  <  y才可以,负责将会报错。

^ :排除,不包含

eg:有时候我们会匹配一些相反的内容,比如不是数字的,将会包含大小写字母、特殊符号。书写麻烦,使用^将会很简单做到。[^0-9]就可以了。

eg:[^0-9a-d]:文本时0123456789abcdZ如果你觉得结果为“abcdZ“那你就错了,正确的结果是”Z“,这个正则表达式不是表示的要匹配不包含0 – 9 和包含a – d 的内容,而是匹配的不包含0 – 9 和 a – d 的内容

eg:^现在说的只是在[]中的表示方式。

一些常见的简写

\d = [0-9] =[0123456789]

\D = ^\d

\w = [_a-z0-9A-Z] 

\W =  ^\w

\s = [  \r\t\n\b\f] eg: 第一个内容为空。\s被叫做“空白字符“。

\S = ^\s

{}{n}{m,n}{m,}*{0,}?{0,1} +{1,}

 

 

{}匹配内容出现的次数

{n}:前面的内容必须出现n次

eg:文本“0123456789“,正则表达式 [\d]{5]结果为01234和56789,

eg:正则表达式 [a]{5}只能匹配“aaaaa“

{m,n}:前面的必须出现在m次和n次之间,m < n 

eg:文本“0123456789“,正则表达式[\d]{2,4},结果为0123、4567、89(此项可能存在差异)

eg:文本“a1a22a333a4444a55“,正则表达式[\d]{2,4},结果为12、123、1234

eg:正则表达式[a]{2,4}可以匹配 aa、aaa、aaaa

{m,}:匹配之前至少出现m次的,上线没有规定。

eg:正则表达式[a]{2, }可以匹配 aa、aaa、aaaa、aaaaa……aaa

一些常用的表示次数的简写

*  =  {0,}

?  =  {0,1}

+  =  {1,}

()分组

分组主要用于,再一次匹配中多个数据必须同时出现,但是每个对用不同使用方法,提取URL链接的时候,链接的地址和显示的文字要出现同时出现,但是我们一般需要连接地址和显示文字分开用的。

分组的书写的格式:(?<name>regex),两个小括号见表示一个分组,<>两个尖括号中间表示的是分组的名字,regex表示正则表达式

eg:匹配的文本“<ahref="http://blog.csdn.net/rentiansheng">我的博客</a> “,正则表达式为”<a href="(?<URL>http://[\S]*)">(?<title>[\w]*)</a> “结果为 结果共一个,这一个结果中有两组,值为” http://blog.csdn.net/rentianshenghe我的博客“。(c#中测试的)

 

边界相关的

\b  = [^a-z0-9A-Z_],还有一个没有描述出来就是每一行的开始,即是什么也没有的。可以用来表示单词的边界。

         下面我们举一个例子:

         X:表示没法匹配。√:表示可以匹配

字符串

\brow\b

row\b

\brow

tomorrow

X

X

brown

X

X

X

rowdy

X

X

X

row

       eg:匹配所有的单词 \b[\w]+\w

        

^:表示行的开始。与我们看到屏幕上的一行行是有区别的。因为屏幕上可能会因为一行装不下。所以自动换行造成的。对^来说前面没有见任何东西或者\n(只有window中式\r\n)后面的第一个单词才是。注意,回车并会产生的是\f因而不是换行。

$:表示是行的结束。即是最后一个单词。也有可能是\n(只有window中式\r\n)前面的一个单词。

 

|:多选

         书写格式(regex|regex|regex|……|regex)

        eg:身份证可以分为18位和15位,

                   匹配18位身份证的正则表达式“”

                   匹配15位身份证的正则表达式“[1-9]\d{14}”

                   所以同时匹配18又匹配15的正则表达式可以写作”([1-9]\d{16}[0-9x]| [1-9]\d{14})”但是一般写作“[1-9]\d{14}(\d{2}[0-9x])?”

         eg: IP地址匹配。这个比较麻烦。我们只说其中的一段地址可能是1、2、3。

        

位数

取值范围

正则表达式

3位

100-199            

1\d{2}

200-249

2[0-4][0-9]

250-255

25[0-4]

2位

10-99

[1-9]\d

1

0-9

\d

         随意IP地址其中 一段地址的匹配位(\d|[1-9]\d|1\d{2}|2[0-4][0-9]|25[0-4])

         匹配IP地址位(\d|[1-9]\d|1\d{2}|2[0-4][0-9]|25[0-4]))\.{4}。注意其中的\.表示匹配“.”。 “\”用来匹配转意字符的。

         eg:文本为“doube times or 2 time”,正则表达式为“doube|2 times”,你可能认为结果是“doubletimes”和 “2times”,错了,结果是“double”和“2 time”。想让结果产生的是“double times”和 “2 times”的正则表达式是“doube times|2times”和 “(doube|2)times”,后面的会产生分组。

注意:|将本组中前面所有的表达式和和后面的表达进行的或运算。



原文地址:http://blog.csdn.net/rentiansheng/article/details/8583386
  相关解决方案