RegularExpression
Regux / Reguxp
语法构成
普通字符
涵盖:大小写字母、数字、标点、特殊符号
| 打印字符 | 描述 |
|---|---|
| abc | 匹配所有字符中的 abc。注意与[abc]的区别 |
| [abc] | 字符簇。匹配所有字符中单个的 a、b 或 c。[a | b | c] |
| [a-z] | 字符簇。匹配所有字符中的任一小写字母。 |
| [A-Z] | 字符簇。 匹配所有字符中的任一大写字母。 |
| [0-9] | 字符簇。 匹配所有字符中的任一数字。 |
| [^abc] | 字符簇。匹配所有字符中非的 a、b 或 c。 |
| . | 匹配除换行(\n、\r)之外的任一字符。[^\n\r] |
| [\s] | 匹配所有的空白字符包括换行符、空格、制表符、换页符等。 |
| [\S] | 匹配所有的非空白字符不包括换行符、制表符、换页符。[^\f\n\r\t\v] |
| [\w] | 匹配任一数字、字母、下划线 。[0-9a-zA-Z_] |
| [\W] | 匹配任一非单词字符。[^0-9a-zA-Z_] |
| [\d] | 匹配任一数字字符。[0-9] |
| [\D] | 匹配任一非数字字符,包括字母、空格、下划线。[^0-9] |
非打印字符
| 非打印字符 | 描述 |
|---|---|
| \cx | 匹配为 x 字母的控制字符。x 可以是任一字母。 |
| \f | 匹配一个换页符。\x0c 、\cL |
| \n | 匹配一个换行符。 |
| \r | 匹配一个回车符。 |
| \t | 匹配一个制表符。 |
| \v | 匹配一个垂直制表符。 |
| \num | 匹配正整数 num,对所获取的匹配的引用。 |
元字符
| 元字符 | 描述 |
|---|---|
| ^ | 匹配整个字符串的开始位置。 |
| $ | 匹配整个字符串的结束位置。 |
| * | 匹配前一个子表达式零次及以上。{0,} |
| + | 匹配前一个子表达式一次及以上。{1,} |
| ? | 匹配前一个子表达式零次到一次。{0,1} |
| . | 匹配除换行符之外的任一字符。 |
| \ | 转义字符。将下一个字符标记为特殊字符、原意字符或向后引用,或八进制转义字符。 |
| () | 标记一个组(子表达式)。定义操作符的范围和有限级。选择项必须要放置在()中。 |
| [ | 标记一个中括号表达式的开始。 |
| ] | 标记一个中括号表达式的结束。 |
| { | 标记限定符表达式开始。 |
| } | 标记限定符表达式结束。 |
| | | 或。匹配前后两项中的任一个。优先级最低。 |
限定符
表述指定的正则组件必须出现的次数才符合匹配
| 限定符 | 描述 |
|---|---|
| * | 匹配前一个子表达式零次及以上。{0,} |
| + | 匹配前一个子表达式一次及以上。{1,} |
| ? | 匹配前一个子表达式零次到一次。{0,1}。跟在任一其他限定符后面时,表示匹配模式是非贪婪的,即尽可能少的匹配描述的字符串。 |
| {n} | 匹配前一个子表达式 n 次。 |
| {n,} | 匹配前一个子表达式 n 次及以上。 |
| {n,m} | 匹配前一个子表达式 n 次到 m 次。 |
定位符(锚点)
| 定位符 | 描述 |
|---|---|
| ^ | 匹配字符串的开始位置。 |
| $ | 匹配字符串的结束位置。 |
| \b | 匹配一个单词的边界(wordboundary,A word boundary is a zero-width test between two characters)。匹配字符与空格之间的位置。即匹配前一个子表达式且在单词的收尾或开头(取决于\b 放置的位置) |
| \B | 匹配非单词的边界。匹配单词间字符与字符之间的边界。即匹配前一个子表达式且前一个表达式不能在字符串的收尾或开头(取决于\B 放置的位置) |
组与引用
()表示捕获分组
| () | 捕获分组,把每个分组里匹配的值保存起来,多个可通过用 n 表示组的序号来查看 |
零宽断言
| 非捕获元 | 描述 |
|---|---|
| (?:pattern) | 非捕获组,创建无法引用的分组。 |
| (?=pattern) | 正向预查,在任何开始匹配圆括号内表达式的位置查询。匹配的元素后方紧跟着需要有能匹配括号内表达式匹配到的元素。 |
| (?!pattern) | 正向否定预查。在任何不匹配该表达式的位置查询。匹配到的元素后方紧跟着的不能含有括号内表达式匹配的元素。 |
| (?<=pattern) | 反向肯定预查。匹配元素的前一个元素是括号表达式陪陪的元素。 |
| (?<!=pattern) | 反向否定预查。匹配元素的前一个元素不能是括号表达式陪陪的元素。 |
| 示例 | 描述 |
|---|---|
| r(?=e) | 匹配单词中后面有 e 的 r |
| r(?!e) | 匹配单词中后面没有 e 的 r |
| (?<=e)r | 匹配前面有 e 的 r |
| (?<!=e)r | 匹配前面没有 e 的 r |
1 |
|
flags 标志
flags 放置在 pattern 的后面,可以是多个 flags 同时使用。
| 标志 | 描述 |
|---|---|
| i | 忽略大小写。 |
| g | 全局查找,确保表达式不会在第一个匹配项时停止。 |
| m | 多行查找,不启用^和$只匹配整个字符串的开始和结束,而不会单独匹配每一行。 |
| s | 默认.匹配的是除换行\n 以外的任一字符,加上 s 后.可以匹配包括换行在內的任一字符。 |
优先级
| 优先级 | 符号 |
|---|---|
| 最高 | \ |
| 高 | ()、(?:)、(?=)、[] |
| 中 | *、+、?、{n}、{n,}、{n,m} |
| 低 | ^、$、中介字符 |
| 次低 | 串联。相邻的字符连接在一起 |
| 最低 | | |

sed
shell 的 sed 不支持、\d、\D、零宽断言,且 sed 下的正则表达没有懒惰模式,都是贪婪模式。
Per
可更好的替代 sed 使用。
