linux学习-正则表达式基础
  TEZNKK3IfmPf 2023年11月14日 72 0

“.”符号

点符号用于匹配除换行符之外的任意一个字符。例如:r.t可以匹配rot rut,但是不能匹配root,若使用r..t就可以匹配root、ruut、r t(中间是两个空格)等。下面的例子是从/etc/passwd中搜索出“包含r,紧跟着两个字符,后面在接t”的行。

grep 'r..t' /etc/passwd

“”符号

“”符号用于匹配前一个字符0次或者任意多次,比如ab*,可以匹配a,ab,abb等。“*”符号经常和“.”符号在一起使用。比如“.”代表任意长度的不包含换行的字符。下面的例子是试图找到连续的r字母紧跟着字母t的行。由于在/etc/passwd中没有rt,rrt这样的匹配,所以该表达式实际上只找出了包含t的行(r匹配了0次)

grep 'r..t' /etc/passwd

如果把上面的‘rt’换成‘r.t’,代表查找包含字母r,后面紧跟任意长度的字符,再跟一个字母t的行。如下所示:

grep 'r.*t' /etc/passwd

“\{n,m\}”符号

虽然“”可用于重复匹配前一个字符,但却不能精确地控制匹配的重复次数,使用“{n,m}”符号则能更加灵活地控制字符重复的次数: \{n,\} 匹配前面的字符n次,下列匹配的是包含root的行(r和t包含两个o)

grep 'r.*t' /etc/passwd

{n,} 匹配前面的字符至少n次以上(含n次)

grep 'ro\{0,\}t' /etc/passwd

“^”符号

匹配开头的字符,例如“^root”匹配的是以字母root开始的行 grep '^root' /etc/passwd

“$”符号

此符号用于匹配尾部,例如“abc$”代表以abc结尾的行。如果是"^$"则代表为空,因为^和$之间什么都没有。下面匹配的是以r开头,中间有一串任意字符,以h结尾的行。

grep '^r.*h$' /etc/passwd

“[]”符号

用于匹配方括号内出现的任一字符。比如单项选择题的答案,可能是A,B,C,D选项的任一种,用正则表达式就是[ADCD]。如果遇到比较大范围的匹配,比如说要是匹配任意一个大写字母,就需要使用“-”号做范围限定,写成[A-Z],要匹配所有的字母则写成[A-Za-z] 以匹配手机号为例,手机号是11位连续的数字,第一位一定是1,所以表示为“^1”;第二位可能是3(移动)或者8(联通),表示为“[38]”;后续9个任意数字,表示为‘[0-9]’,所以整个表达式写为“^1[38][0-9]{9}”

"<"和“>”

这两个符号分别用于界定单词的左边界和右边界。比如“<hello”用于匹配hello开头的单词,而“hello>”用于匹配hello结尾的单子。可以使用“<hello>”精确匹配hello这个单词

“\d”

匹配一个数字,等价于[0-9]

其他符号说明

\b 匹配单词的边界 \B 匹配非单词的边界 \w 匹配字母、数字和下划线,等价于[A-Za-z0-9] \W匹配非字母、非数字、非下划线等价于[^A-Za-z0-9] \n 匹配换行符 \r 匹配回车符 \t 匹配制表符 \f 匹配换页符 \s 匹配任何空白字符 \S 匹配任何非空白字符

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   52   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   30   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   29   0   0 linuxbind
  TEZNKK3IfmPf   2024年05月31日   40   0   0 linuxshell
TEZNKK3IfmPf