[]:要匹配的内容的范围
直接要匹配的内容写入[]中间即可
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”,后面的会产生分组。
注意:|将本组中前面所有的表达式和和后面的表达进行的或运算。