通配符
? 匹配0个或1个字符
* 匹配0个或多个字符
正则表示式
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式
| 字符 | 描述 |
|---|---|
| ^ | 匹配字符串的开始位置。如果设置 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置 |
| $ | 匹配字符串的结束位置。如果设置 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置 |
| ? | 出现次数=0或1。等价于 {0,1} |
| * | 出现次数>=0。等价于:{0,} |
| + | 出现次数>=1。等价于:{1,} |
| {} | 1. {n}:匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o2. {n,}:至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。3. {n,m}:其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格 |
| [ABC] | 匹配 [...] 中任一字符。示例: [aeiou]匹配字符串 "google runoob taobao" 结果: |
| [^ABC] | 匹配除了 [...] 中字符以外的其它字符示例: [^aeiou] 匹配字符串 "google runoob taobao" 结果: |
| [A-Z] | 区间匹配,匹配任一大写字母,[a-z] 表示匹配任一小写字母 |
| [^A-Z] | 区间以外匹配,[^a-z] 表示匹配除小写字母以外的任一字符 |
| \w | 数字、字母、下划线。等价于 [A-Za-z0-9_] |
| \W | 非数字、字母、下划线。等价于 [^A-Za-z0-9_] |
| \d | 数字。等价于 [0-9] |
| \D | 非数字。等价于 [^0-9] |
| \b | 单词边界匹配 如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。 如果它位于字符串的结尾,它在单词的结尾处查找匹配项 示例1: \bkit匹配字符串"hello kitty.xml"结果:hello kitty.xml示例2: itty\b匹配字符串"hello titty.xml"结果:hello kitty.xml |
| \B | 非单词边界匹配 位置并不重要,因为匹配不关心究竟是单词的开头还是结尾 示例: \Bapt匹配字符串"aptitude Chapter"结果:aptitude Chapter |
| . | 点号表示匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r] |
| [\s\S] | 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行 |
| (?=pattern) | exp2(?=exp1):查找 exp1 前面的 exp2正向肯定预查。在任何匹配pattern的字符串开始处做为起点向左查找字符串 |
| (?<=pattern) | (?<=exp1)exp2:查找 exp1 后面的 exp2。零宽断言(Look behind)。在任何匹配pattern的字符串开始处做为起点向右查找字符串 |
| (?!pattern) | exp2(?!exp1):查找后面不是 exp1 的 exp2。正向否定预查。在任何不匹配pattern的字符串开始处做为起点向左匹配查找字符串 |
| (?<!pattern) | (?<!exp1)exp2:查找前面不是 exp1 的 exp2。反向否定预查。在任何不匹配pattern的字符串开始处做为起点向右匹配查找字符串 |
贪婪/非贪婪
* 和 + 都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配
- 示例:以下字符串
使用<h1>RUNOOB-菜鸟教程</h1><.*>匹配结果使用<h1>RUNOOB-菜鸟教程</h1><.*?>匹配结果使用<h1><\w+?>匹配结果通过在<h1>*、+或?限定符之后放置?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配
Named Group
语法格式:
?<name>...
与或非
- 与:同时包含hello和world
(?<=(?=[\s\S]*hello)(?=[\s\S]*world)[\s\S]*)(hello|world) - 或:包含hello或包含world
hello|world - 非
- 不包含abc
^((?!abc)[\s\S])*$ - 包含abc且不包含abcde
^((?!abcde)[\s\S])*(?=abc)((?!abcde)[\s\S])*$
- 不包含abc