【Linux】正则表达式学习记录
正则表达式
- 正则表达式
- 位置标记
- 标识符
- 数量修饰符
- 捕获元和非捕获元, 用于操作某个匹配中的一部分内容
- 其他
- 正则式用例
- 扩展正则表达式
正则表达式
位置标记
- ^ (匹配行首)
- $ (匹配行尾)
标识符
- . (匹配任意字符)
- [] (匹配中括号内的任意单个字符)
- [^] (不匹配中括号内的任意单个字符)
数量修饰符
- ? (匹配0或1次)
- + (匹配1或多次)
- * (匹配0或多次)
- {n} (匹配之前的项n次)
- {n,} (至少匹配之前的项n次)
- {n,m} (至少匹配之前的项n次,至多匹配m次)
捕获元和非捕获元, 用于操作某个匹配中的一部分内容
- () (捕获括号内的内容并缓存,通过$0-$9来进行调用)
- (?:\) (非捕获元)
- (?=) (匹配后边等于xxx的XXX)
- (?<=) (匹配前边等于xxx的XXX)
- (?!) (匹配后边不等于xxx的XXX)
- (?<!) (匹配前边不等于xxx的XXX)
其他
- () (将括号中的内容视为一个整体)
- | (选择结构,可以匹配两边的任意一项(A|a), 不是所有语言的正则都支持该符号)
- \ (转义字符,转义之后的一个字符)
正则式用例
( +[a-zA-Z]+[?,.]? +) # 匹配任意单词
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} # 匹配IP地址,仅匹配,不检查合法性
[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3} # 匹配IP地址,仅匹配,不检查合法性
(?:[Ww]indows).* # 用于匹配任何windows型号中的"Windows"字符串
hello(?= world) # 用于匹配后面是world单词的hello字符串
(?<=hello )world # 用于匹配前面是hello单词的world字符串
hello(?! world) # 用于匹配后面不是world单词的hello字符串
(?<!hello )world # 用于匹配前面不是hello单词的world字符串^\s*(?=\r?$)\n # 匹配空行
- 正则式引擎通常会选择最长匹配。
- 可以匹配的文本,可以是管道的输出、文件、或者命令行输入的字符串。
- 可视化正则表达式
扩展正则表达式
- grep 要加-P选项。
- Perl正则支持。要开启扩展正则表达式支持。
- \d (等价于[0-9], 匹配数字)
- \D (等价于[^0-9], 不匹配数字)
- \b (匹配单词边界, 指单词和空格的位置)
- \B (不匹配单词边界)
- \s (匹配任何不可见字符,包括空格符、制表符、换页符等。等价于[\f\n\r\t\v])
- \S (匹配任何可见字符。等价于[^\f\n\r\t\v])
- \w (匹配包括下划线的任何单词字符。Unicode字符。)
- \W (匹配任何非单词字符。)
- \f (换页符, \x0C和\cL)
- \n (换行符, \x0A和\cJ)
- \r (回车符, \x0D和\cM)
- \t (制表符, \x09和\cI) TODO:不确定是\cI还是\cl
- \v (垂直制表符, \x0B和\cK)
- \c[A-Za-z] (匹配一个控制字符)
- \x[0-9A-F]{2} (匹配一个十六进制值,必须是两个数字长,0x00-0xFF)
- \u[0-9A-F]{4} (匹配一个十六进制值,必须是4个数字长,0x0000-0xFFFF,Unicode字符)
\u00A9匹配版权符号
- \n[0-7]+ (匹配一个八进制值)
- \[1-9] (对获取匹配(xxx)的引用,如:"(.)\1"匹配两个连续相同的字符, 只有一条反斜杠,写两条是因为Markdown预览器做了转义)
- \p[PLMZSNC] (匹配Unicode属性)
- < (匹配单词的开始)
- > (匹配单词的结束)
<the>可以匹配"on the table"中的"the",但是无法匹配"otherwise"中的"the"。