Glab

正则表达式01


正则表达式教程

正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找和替换字符串中的模式。本教程将介绍正则表达式的基础知识和常用技巧。

1. 基本概念

正则表达式是由普通字符(如字母a-z)和特殊字符(称为"元字符")组成的文本模式。

2. 基本匹配

3. 常用元字符

字符类

一些特殊需求
[\d] 只匹配 \ 和d两个字符
[[a] 匹配[ 时必须放到[之后
[a-] 匹配-时必须放到]之前

量词

位置锚点

分组和引用

选择

元字符

元字符描述
\d匹配数字(等价于[0-9])
\D匹配非数字
\w匹配单词字符(字母、数字、下划线)
\W匹配非单词字符
\s匹配空白字符(空格、制表符、换行符等)
\S匹配非空白字符

POSIX 字符类

POSIX字符类描述字符
[:alnum:]所有的字母和数字== [:word:] == [a-zA-Z0-9]
[:word:]同[:alnum:]
[:alpha:]所有的字母== [a-zA-Z]
[:blank:]所有呈水平排列的空白字符空格、制表符
[:cntrl:]所有的控制字符[\x00-\x1F\x7F]
[:digit:]所有的数字
[:graph:]所有的可打印字符,非空格、控制字符[\x21-\x7E] '[:alnum:]' and '[:punct:]'
[:lower:]所有的小写字母
[:print:]所有的可打印字符,包括空格'[:alnum:]', '[:punct:]', and space.
[:punct:]所有的标点字符! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` ~ { } ~ \
[:space:]所有呈水平或垂直排列的空白字符(新行,空格,制表符)
[:upper:]所有的大写字母
[:xdigit:]所有的十六进制数[A-Fa-f0-9]
[:ASCII:]ASCII集合== [\x00-\x7F]
实际使用: [[:alnum:]] #需要两个[[]]
[^[:alnum:]] #取反

4. 高级特性

贪婪与懒惰匹配

默认是贪婪的,在量词后加?变为懒惰

零宽断言

1. 零宽度正预测先行断言(?=exp),  所取字符串后匹配exp  
断言自身出现的位置的后面能匹配表达式exp。  
\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),
如查找I'm singing while you're dancing.时,它会匹配sing和danc。

# echo "I'm singing while you're dancing."|grep -Po '\b\w+(?=ing\b)'
sing
danc

2. 零宽度正回顾后发断言(?<=exp) , 所取字符串后匹配exp
断言自身出现的位置的前面能匹配表达式exp。
(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),
如在查找reading a book时,它匹配ading。


3. 零宽度负预测先行断言(?!exp)  
断言此位置的后面不能匹配表达式exp 
\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;
\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词

4. 零宽度负回顾后发断言(?<!exp)
断言此位置的前面不能匹配表达式exp
(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »