6-2 正则表达式
[!quote] 正则表达式 正则表达式 是构成搜索模式的字符序列,可以使搜索更强大
模式
范围
[]字符集合
`[abc]` 查找方括号之间的任何字符^排除
`[^abc]` 可以匹配 `plain` 中的 `plin`-区间
`[0-9]` 查找任何从 0 至 9 的数字()整体
`gr(a|e)y` 等价于 `gray|grey`
`(grand)?father` 匹配 `father` 和 `grandfather`|选择
`(x|y)` 查找 x 或 y量词
?表示前面的字符最多出现一次
`colou?r` ,可以匹配 `color` 或者 `colour`{n}前面的字符出现 n 次
`o{2}` 不能匹配 `Bob` 中的 `o`,但是能匹配 `food` 中的两个 `o`{n,}前面的字符至少出现 n 次
`o{2,}` 不能匹配 `Bob` 中的 `o`,但能匹配 `foooood` 中的所有 `o`。
`o{1,}` o 至少出现一次
`o{0,}` o 可以出现任意次(包括0次){n,m}最少匹配 n 次,且最多匹配 m 次
`o{1,3}` 将匹配 `fooooood` 中的前三个 `o`其他
\转义字符
`n` 匹配字符 `n`
`\n` 匹配一个换行符
`\\` 匹配 `\`
`\(` 匹配 `(`^位于正则表达式的开始位置时,匹配输入字符串的开始位置
`^abc` 匹配所有以 "abc" 开头的字符串,"abc"、"abcdefg"、"abc123" ……$位于正则表达式的结束位置时,匹配输入字符串的结束位置
`abc$` 匹配所有以 "abc" 结尾的字符串,"123abc"、"xyzabc"……其他限制符?当?紧跟在任何一个其他限制符【*,+,?,{n},{n,},{n,m}】后面时,会使用非贪婪的匹配模式
[!quote] 非贪婪模式
- 非贪婪模式:尽可能少的匹配所搜索的字符串
- 贪婪模式:尽可能多的匹配所搜索的字符串【默认】
对于字符串
oooo:
o+?将匹配单个oo+将匹配所有o
.匹配除 之外的任何单个字符
[!hint] 要匹配包括 在内的任何字符,使用
(.|\n)
特殊符号
[:alnum:]英文大小写字母及数字,亦即 0-9,A-Z,a-z[:alpha:]任何英文大小写字母,亦即 A-Z,a-z[:cntrl:]键盘上面的控制按键,亦即包括 CR,LF,Tab,Del...[:digit:]数字【0-9】[:blank:]空格键与Tab 键[:space:]任何会产生空白的字符,包括空格键,[Tab],CR ……[:graph:]除了空格键,和Tab 键外的其他所有按键[:lower:]小写字母[:upper:]大写字母[:print:]任何可以被列印出来的字符[:punct:]标点符号【:",',?,!,;,:,#,$ ……】[:xdigit:]16 进位的数字类型,因此包括: 0-9,A-F,a-f 的数字与字节
# 将匹配所有的数字
echo '1234\nabcd' | grep '[[:digit:]]'优先级
优先级从上到下,从左到右,依次降低
| 运算符 | 说明 |
|---|---|
\ | 转义符 |
(),(?:),(?=),[] | 括号和中括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,\ 任何元字符 | 定位点和序列 |
| | | 选择 |