一、简单的正则表达式
注意:
在使用正则表达式的时候,会发现几乎所有的问题都有不止一种解决方法。
有的比较简单,有的比较快速,有的兼容性很好,有的功能更全,同一个问题往往会有多种解决方案。
二、匹配单个字符
1、匹配纯文本
2、多个匹配结果直接输入文本,就可以匹配。
如:
I am a boy.
输入正则表达式 am
绝大多数正则表达式引擎的默认行为是只返回第1个匹配结果,也有实现了一种能够把所有的匹配结果全部找出的机制(通常返回一个数组或是其他的专用格式)。
3、字母的大小写问题
绝大多数正则表达式都支持不区分字母大小写的操作,强制执行一次不区分字母大小写的搜索。
4、匹配任意字符
. 字符(英文句号)可以匹配任何一个单个的字符。
注意:
通过DOS的文件搜索功能 正则表达式 . 字符相当于DOS的?字符
SQL中的 _ (下划线) 字符 相当于正则表达式 . 字符
正则表达式可以用来匹配包含着字符串内容的模式。
匹配的并不总是整个字符串,而是与某个模式相匹配的字符——即使它们只是整个字符串的一部分。
5、匹配特殊字符
如果模式里需要一个 . 就要想办法来告诉正则表达式,你需要的是 . 本身而不是它在正则表达式里的特殊含义。
为此,必须在 . 的前面加上一个 \ (反斜杠)字符来对它进行转义。
\ 是一个元字符 (metacharacter,表示“这个字符有特殊含义,而不是字符本身含义”)
注意:
如果需要搜索 \ 本身,就必须对字符进行转义,相应的转义序列是两个来许的反斜杠字符 \\ .
在绝大多数的正则表达式实现里, . 可以匹配除了换行符之外的任何单个字符。
三、匹配一组字符
1、匹配多个字符中的某一个
[ns]a.\.xls 匹配以[ns]开头 : 这个集合匹配字符n或s(但不匹配其他字符)
注意:验证某个模式能不能获得预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。
[Rr]eg[Ee]x 可以匹配RegEx和regex,但不匹配REGEX
如果打算进行一次不需要区分字母大小写的匹配,不需要使用这个技巧,这种模式最适合用在全局看需要区分字母大小写,但在某个局部不需要区分字母大小写的搜索操作中。
2、利用字符集合区间
A-Z 匹配从A到Z的所有大写字母
a-z 匹配从a到z的所有小写字母
A-F 匹配从A到F的所有大写字母
0-9 等价于 0123456789
#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f] 用来匹配 RGB值 如:#336633 #FFFFFF
在定义一个字符区间的时候,一定要避免让这个区间的尾字符小于首字符 如: [3-1] 没有意义还会让整个模式失效
- (连字符) ,只能用在 [ 和 ] 之间。
3、取非匹配
除了那个字符集合里的字符,其他字符都可以匹配。
如: [ns]a[^0-9] \.xls
^ 的效果将作用于给定字符集合中所有字符或字符区间,而不是仅限于紧跟在^字符后面的那一个字符或字符区间
4、匹配空白字符
[\b] 回退(并删除)一个字符(Backspace)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符
\r\n 匹配一个 “回车+换行” 组合 是 Windows所使用的文本行结束标签
Unix和Linux系统只是用一个换行符来结束一个文本行 :\n
4、使用元字符
\d 任何一个数字字符 等价于 [0-9]
\D 任何一个非数字字符 等价于 [^0-9]
\w 任何一个字母数字字符(大小写均可)或下划线字符 等价于 [a-zA-Z0-9_]
\W 任何一个非字母数字或非下划线字符 等价于 [^a-zA-Z0-9_]
\s 任何一个空白字符 等价于 [\f\n\r\t\v]
\S 任何一个非空白字符 等价于 [^\f\n\r\t\v]