正则表达式
正则表达式
Unix系统偏好于以可读的文本处理
- vi、emacs、grep、sed、awk都支持正则表达式
- systemd
正则表达式RE是一种语言,这种语言表现为一种的表达式
RE可以完全的表示有限自动机DFA、NFA
RE主要用于定义词法
Posix标准中RE分为
- BRE
- ERE
RE字符集
RE将字符分为普通字符和元字符
字符 | BRE/ERE | 含义 |
---|---|---|
\ | Both | 转义 |
. | Both | 匹配单个字符 |
* | Both | 匹配任意次,可以是0次。a*表示匹配任意多次a,.*表示任意字符串 |
^ | Both | 锚定匹配位置,从一行的行首开始 |
$ | Both | 锚定匹配位置,到一行的行尾 |
[…] | Both | 匹配中括号内的某个字符。x-y表示一个范围;[^…]表示不匹配中括号中的任意字符。[开括号后跟-或],-]转义为普通字符 |
\{n,m\} | BRE | 匹配次数为[n,m],\{n\}匹配n次,\{n,\}最小匹配次数为n |
\( \) | BRE | 定义一个匹配位置,在后部可以引用该位置。例如,\(ab\).*\1表示ab字符串包夹了一个任意字符串。 |
\n | BRE | 引用已经定义的位置,可以从\1到\9 |
{n,m} | ERE | 与BRE的\{n,m\}相同 |
+ | ERE | 匹配至少1次 |
? | ERE | 匹配0或1次 |
| | ERE | 或 |
() | ERE | 匹配括号内的整个字符串 |
[ ]表达式是选择匹配中任意一个字符
- c[aeiouy]t,匹配可以是cat、cet、cot等
- [0123456789]表示为[0-9]
特别的
- [[:alnum:]] 字符+数字
- [[:alpha:]] 字符
- [[:digit:]] 数字
- [[:lower:]] 小写字符
- [[:upper:]] 大写字符
- [[:space:]] 空字符:空格、tab等
RE例子
[*\.], []*\.], [-*\.], []*\.-]
BRE: \(ab\)\(cd\)[def]*\2\1 abcdecdab
BRE: \(why\).*\1 whyXXwhy
\([[:alpha:]_][[:alnum:]_]*\) = \1 c语言赋值语句
^ABC
Def$
vi的正则表达式搜索与替换
首先检查magic变量,一般是magic
- :set magic?
/或?
- 后跟一个RE表达式
替换
:range s/from/to/flags
range表示行范围,%是全局所有行
- 1,$表示从1行到尾行
flags为g表示这一行中所有的匹配项都替换
:%s/from/to/g最常用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小狐狸的被窝!
评论
WalineValine