- 元字符
- \d
匹配数字 - \w
匹配word(数字、字母、下划线) - \s
匹配white space(空格和tab) - \b
匹配单词的开始或结束 - ^
匹配字符串的开始 - $
匹配字符串的结束 - .
匹配任何字符
- \d
- 常用限定符
- {n}
重复n次 - {n,}
重复n次或更多次 - {n,m}
重复n到m次 - 匹配任意次(可以为0次)
- 匹配重复一次或者多次
转义字符,e.g. .,*,\- ?
重复零次或一次 - |
分枝条件 - ()
分组
- {n}
- 反义字符
- \W
匹配非word - \S
匹配非whie space - \D
匹配非数字 - \B
匹配不是单词开头或结束的位置 - [^aeiou]
匹配除了aeiou字母以外的任意字符
- \W
- 简单例子
- \ba\w*\b
匹配以字母a开头的单词 - \b0\d{2}-\d{8}
匹配0开头格式为 0**-********* 其中*为数字 - ^\d{5,12}$
匹配5~12位数字 - (?0\d{2}[) -]*\d{3}
匹配 000-1234, (000)-1234, 000 1234 - \d{3}-\d{4}|(\d{3}) \d{4}
匹配000-1234, (000) 1234 - (\d{1,3}.){3}\d{1,3}
匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字 - <a[^>]+>
匹配用尖括号括起来的以a开头的字符串
- \ba\w*\b
- 复杂用法
- 捕获
- (exp)
匹配exp,并捕获文本放到自动命名组 - (?
exp)
匹配exp,并捕获文本放到name组 - (?:exp)
匹配exp,不捕获文本,也不分组号
- (exp)
- 零宽断言
- (?=exp)
断言自身出现的位置的后面能匹配表达式exp - (?<=exp)
断言自身出现的位置的前面能匹配表达式exp
- (?=exp)
- 负向零宽断言
- (?!exp)
断言此位置的后面不能匹配表达式exp - (?<!exp)
断言此位置的前面不能匹配表达式exp
- (?!exp)
- 贪婪与懒惰
- *?
重复任意次,但尽可能少重复 - +?
重复1次或更多次,但尽可能少重复 - ??
重复0次或1次,但尽可能少重复 - {n,m}?
重复n到m次,但尽可能少重复 - `{n,}?
重复n次以上,但尽可能少重复
- *?
- 示例
- \b(?
\w+)\b\s+\k
可以用来匹配重复的单词,e.g. test test -> test test - \b\w+(?=er\b)
匹配以er结尾的单词除去er的部分,e.g. I’m a singer -> sing - (?<=\bt)\w+\b
匹配以t开头的单词除去t的部分,e.g. I’m try to exercise my English -> ry o - \d{3}(?!\d)
匹配三位数字,而且这三位数字的后面不能是数字 - (?<![a-z])\d{7}
匹配前面不是小写字母的七位数字 - (?<=<(\w+)>).*(?=</\1>)
匹配不包含属性的简单HTML标签内里的内容 e.g.test-> test - 2[0-4]\d(?#200-249)|250-5|[01]?\d\d?(?#0-199){
带注释的匹配项
- \b(?
- 捕获
点击查看幕布详情