正则表达式的作用
1.测试字符串内的模式:
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
2.替换文本:
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
3.基于模式匹配从字符串中提取子字符串。
4.可以查找文档内或输入域内特定的文本。
正则表达式语法1
普通字符
字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”
像这样的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
转义字符
**\n** 代表换行符
**\t** 代表制表符
**\\\\** 代表\本身
匹配字符本身的转义字符:
\^ \$ \( \) \{ \} \? \+ \* \| \[ \]
正则表达式语法2
标准字符
**\d** 0~9中的任意一个数字
**\w** A~Z、a~z、_ (任意一个数字 字母下划线)
**\s** 空格 制表符 换行符
**.** 小数点可以匹配任意一个字符
**注意:\后面对应上边字母的大写则匹配的正好相反**
**比如 **\D** 匹配的是非数字**
正则表达式语法3
既有标准字符,就会有为了满足某些特定需要的自定义字符
自定义字符
**[]** 方括号 能够匹配方括号中任意一个字符
**[^xxx]** 匹配除了xxx之外的任意一个字符
**[a-c]** 匹配'a'-'c'之间的任意一个字母
正则表达式语法4
修改匹配次数的符号
**{n}** 表达式重复n次
**{m,n}** 表达式可重复m到n次
**{m,}** 表达式至少重复m次
**?** 匹配表达式0次或者1次 相当于{0,1}
**+** 表达式至少出现一次 相当于{1,}
**\*** 表达式不出现或者出现任意次 相当于{0,}
关于匹配次数中的贪婪模式和非贪婪模式
贪婪模式也是默认的模式:匹配字符越多越好
比如:
正则表达式为 \d{2,5}
而等待匹配的有如下:
1234 2345 23 345 6
1234567890
匹配的结果就是 数字个数只要符合数字2-5之间 都会尽最多个数数字匹配 当然数字6不会被匹配 1234567890被分开匹配成两个五位数
非贪婪模式:匹配字符越少越好
比如:
正则表达式为 \d{2,5}
而等待匹配的有如下:
1234 2345 23 345 6
1234567890
会发现匹配的结果是 数字个数只要符合2—5之间 都会尽最少个数数字匹配 1234567890被分开匹配成五个两位数
正则表达式语法5
位置的匹配
**^([]外的符号)** 与字符串开始的地方匹配
**$** 与字符串结束的地方匹配
**\b** 匹配一个单词的边界
比如:
正则表达式为 ^ab
等待匹配的有如下:
ab ab ab
ab
会发现匹配的结果是 只有第一行第一个ab匹配
比如:
正则表达式为 ab$
等待匹配的有如下:
ab ab ab
ab
会发现匹配的结果是 只有第二行最后一个ab匹配
比如:
正则表达式为 aa\b
等待匹配的有如下:
aa aa123 123aa bbaa
会发现匹配的结果是 aa 123aa bbaa 可以匹配 而aa123 就不行了
正则表达式语法6
**选择符 |** 匹配选择符左边和右边的字符
**()** 括号中的表达式可以作为整体被修饰
反向引用
一个关于反向引用的例子:
正则表达式为: ([a-z]){2}\1
(\后边可以为1-9之间的任何数字 意思为引用第几层的表达式 从左边数括号的个数有几个 就有几层引用 在这里为引用第一层)
要匹配的字符串有以下:
abab cdcd abac
匹配的结果就是 abab cdcd 均可以匹配 而abac就不行 不满足条件
正则表达式7
**?=xxx** 断言自身出现的位置的后面能匹配表达式xxx
**?<=** 断言自身出现的位置的前面能匹配表达式xxx
**?!xxx** 断言自身出现的位置的后面不能匹配表达式xxx
**?<!xxx** 断言自身出现的位置的前面不能匹配表达式xxx
一个关于邮箱用户名的匹配
邮箱有以下这些格式:
dasaf@163.com
123556@qq.com
sfs_@fdfs.com.cn
safdf@ff.cn
dasd-asd@dsf.ORG
用这个正则表达式便可以将其全部匹配下来:
([\w-]+)@([\w-]+)(\.[a-zA-Z]{2,5}){1,2}