正则表达式的语法分为4部分
1.正则定界符
2.正则表达式中的原子
3.正则表达式的元字符(原子修饰符)
4.正则表达式的模式修正符

定界符

用来声明正则表达式的边界的符号
常用的是'//';
实际上数字字母'\' 之外的都可以 ~~!!@@##$$%%^^&&**()++--
推荐使用'//';
注意: 正则表达式有两个定界符
一个是字符串的引号边界符
一个是正则表达式的定界符
如果正则表达式定界符是$
那么只能使用单引号

原子

正则表达式中原子也是最小的组成单位
a.普通字符    
    字母数字下划线
b.特殊字符
~!@#$%^&*

c.非打印字符
    \f --- 分页符
    \n --- 换行符
    \r --- 回车符
    \v --- 垂直制表符
    \t --- 制表符
\d  匹配所有数字
\D    匹配非数字
\w  匹配字母 数字 下划线
\W  匹配所有非字母数字下划线
\s     匹配所有空白字符 如 空格 \n\f\v
\S  匹配所有非空白字符

.匹配所有 除\n以外
转义字符  使用\V匹配


正则表达式的元字符(原子修饰符)

[] 原子列表
[abcdef]     可选列表 只能匹配原子列表中的一个字符
[3-5]         连续的字符  345
[^abc]         排除列表  除了里面的字母都可以
 

原子数量修饰符

    + 表示一个或者多个
    ? 表示一个或者0个
    * 表示0个、一个或者多个
    {}
        {m,n} 表示m到n个
        {m,}  表示m个以上
        {m}   表示m个    

词边界修饰符

什么是词边界
    可以分割单词的都是,非字母数字下划线
    \b 词边界
    \B 非词边界
    只对英文有效
    

字符串边界

    ^ 以指定字符开头
    $ 以指定字符结尾
    ^字符串$  精确匹配字符串

选择修饰符

|
 逻辑或
    a|b 匹配a或者b
    abc|def 匹配abc或者def 字符串的结合优先级高于选择
    ab(c|d)ef 匹配abdef 或者匹配abcef

模式单元

()
    改变优先级
    将多个原子视为一个原子
    将匹配的内容暂存在内存
    可以将括号的内容在函数的辅助下反向引用
    // 后向引用,是目标字符串中有重复内容的时候,可以这么用。如果只是模式一样,那是不行的。
    \1\2\3...

模式修正符

    i 忽略大小写
    x 忽略空白
    s   视为一行  .匹配\n
    m   视为多行 .不匹配\n
    
    U   修改贪婪模式       
        (.*) 默认贪婪模式
        (.*?) 默认非贪婪模式