正则表达式规则

^是界定符,表示匹配字符串的开始;
[+-],中括号表示其内的内容都是符合要求的匹配,所以这个表示“+”或者"-";
d,[0-9]的简写形式,也就是匹配数字;
$也是界定符,表示匹配字符串的结束;

了解以上之后再来看问号(?)和星号(*):跟在一个模式内容后面的是量词,用来限定模式内容匹配的次数,例如我想要匹配最少1个、最多3个数字,例如4、20、123、226这样的,先前已经解释过单个数字可以用[0-9]或者d表示,那么怎么表示最少匹配1次、最多3次呢?很简单,就在模式后面加上大括号配合次数表示量词,形式为{下限,上限},就是这样[0-9]{1,3}或者d{1,3}。类似的,[0-9]{2}就表示只能匹配2个数字(多一个少一个都不行),[0-9]{2,}表示至少要有2个数字最多不限(注意大括号内的逗号),[0-9]{,2}表示最多有2个数字(注意大括号的逗号)。
针对经常用的量词
正则中也有简写,{0,1}简写就是问号(要么没有要么只有一次)
{0,}简写就是星号(随便有没有也不限次数)
{1,}简写就是加号(至少有一次)

.*表示任意多个任意字符 例如:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)
*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合
() 标记一个子表达式的开始和结束位置

cx  匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
f  匹配一个换页符。等价于 x0c 和 cL。
  匹配一个换行符。等价于 x0a 和 cJ。
  匹配一个回车符。等价于 x0d 和 cM。
s  匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。
S  匹配任何非空白字符。等价于 [^ f v]。
  匹配一个制表符。等价于 x09 和 cI。
v  匹配一个垂直制表符。等价于 x0b 和 cK。
原文地址:https://www.cnblogs.com/wfwenchao/p/6061139.html