正则表达式学习(2)
oliver34 Engineer

断言

即对匹配到的文本位置有要求

  • 单词边界
    \b
    例:\b\w+\b就可以精确匹配单词
  • 行的开始/结束
    • ^ 表示开始
    • $ 表示结尾
  • 环视
    即要求匹配部分的前面或后面要满足(或不满足)某种规则

    左尖括号代表看左边,没有尖括号是看右边,感叹号是非的意思

转义

  • 转义字符
  • 字符串转义和正则转义
    • 正则中是使用反斜杠进行转义的 例:\\d
    • 括号转义 []{}只需转义开括号,()两个都需要 例:\{1,3}\[]\(\)

常见正则问题和解决方案

  • 匹配数字
    • \d[0-9]表示
    • 连续多个数字: \d+[0-9]+
    • n位数据: \d{n}
    • 至少n位: \d{n, }
    • m-n位: \d{m, n}
  • 匹配正数,负数和小数
    • 匹配正数、负数和小数: [-+]?\d+(?:\.\d+)?
    • 非负整数(0和正整数): [1-9]\d*|0
    • 非正整数(0和负整数): -[1-9]\d*|0
  • 浮点数
    • 负浮点数: -\d(?:\.\d+)?
    • 正浮点数: +?(?:\d+(?:\.\d+)?|\.\d+)
  • 十六进制数: [0-9A-Fa-f]+
  • 手机号码
    • 限制前两位:1[3-9]\d{9}
    • 限制前三位:1(?:3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[1389])\d{8}
  • 身份证号码
    • 规则:我国的身份证号码是分两代的,第一代是 15 位,第二代是 18 位。如果是 18 位,最后一位可以是 X(或 x),两代开头都不能是 0
    • 写法:[1-9]\d{14}(\d\d[0-9Xx])
  • 邮政编码(6位数字):(?<!\d)\d{6}(?!\d)
  • qq号:[1-9][0-9]{4,9}
  • 中文字符
    • 规则:通过码值查找,中文的范围是 4E00 - 9FFF 之间
    • 写法:[\u4E00-\u9FFF]
  • IPv4地址:\d{1,3}(\.\d{1,3}){3}
  • 日期和时间
    • yyyy-mm-dd: \d{4}-\d{2}-\d{2}
  • 邮箱: [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+