-
Notifications
You must be signed in to change notification settings - Fork 0
正则表达式的理解
feaswcy edited this page Mar 3, 2019
·
1 revision
正则是一种用来搜索和替换文本字符串的工具
一般我们写一个字符串就代表 这个字符文本本身,但有一些字符串可以表示一系列的字符串,类似于linux的glob模式一样,这种字符串本身代表着一种通配,比如串'[0-9]'代表一个数字,这个数字在0-9之间,在正则中只有几个东西和字面的意思不一样
- . ^ $ * + ? \ | 这八个英文符号
- () [] {} 三种英文括号
- 如果想表达上面符号本身所代表的字符串,需要在前面加转移符号 \
因此最重要的其实就是这八个英文符号以及 三个括号所代表的规则~
- . 匹配任何单个字符,\n ,\r 代表换行的除外
- ^ 匹配字符串开始的位置,如 ^a 要求字符串的开头是a
- $ 匹配字符串结束的位置,如 a$要求字符串以a结束
- *匹配前面的表达式零次或多次
- +匹配前面的表达式一次或多次
- ?匹配前面的表达式零次或一次, 当?跟在其他限制符后面时,匹配模式是非贪婪的,将会尽可能少的匹配原来限制符所匹配的内容
- \ 用来转义,如比配一个字符串 “.” ,需要写成 .,还会有 \b, \B 将普通字符转成具有含义的通配符,常用的这种类型的元字符有\b, \d, \s, \w
- | 代表或
可以看出 * + ? 这三个都是进行向前匹配一定次数的,更通用的一个写法是o{m,n},标识匹配o的字数在m和n之间。例如 o{1,3} 将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”,逗号之间不能有空格,如此来 * + ? 都可以写成{0,} {1,} {0,1}
三种括号的用法
- () 代表捕获,符合()内正则表达式的内容将会保存在匹配结果的matches中。
- [] 建立一个匹配集合(或者叫字符组),任何一个字符属于这个集合就可以匹配,比如 [ABCDEFG]可以匹配字母A到G的任何字母,匹配所有字母是[A-Za-z],匹配所有数字是[0-9],注意一下,^在字符组中代表取反,而不是文本开始的位置;- 连字符可以代表数字和字符的范围
- {} 如上所述,进行指定次数的多次匹配
查看所有的字符含义的正则表达式全集
- 正则的难度在于在实际中找出文本字符串的规律,写一个可以匹配的正则很容易, 写一个只能匹配的正则很难。
- 有一个网站可以很好的帮你书写正则:regular expression