正则表达式真的很秀,可惜你可能不会写……

很多程序员都有被正则大神碾压过的经历:看着大神写了一串火星文似的字符串,就得到了你要写 50 行代码才能拿到的数据,真是妙蛙种子吃着妙脆角进了米奇妙妙屋 —— 妙到家了。

正则表达式,是一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。比如下面这段检验密码强度的代码:

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

仅仅一行代码,实现的功能就有检测密码:

  • 包含大小写字母和数字

  • 不能使用特殊字符

  • 长度在 8-10 之间

所以说,熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。

今天为大家带来一门免费课程——《正则表达式基础入门》,课程共有 5 个章节,带你在实战中学会正则表达式的文本字符串处理。课程难度一般,欢迎大家进入实验楼打开课程,边敲代码边学习。

课程地址:

https://www.shiyanlou.com/courses/90

以下是课程第一节内容:

什么是正则表达式

正则表达式(Regular Expression)是一个定义搜索模式的字符序列。

在做文字处理或编写程序时,若需要用到查找、替换等功能时,可以使用正则表达式来简单便捷地完成目标。

简单而言,正则表达式通过使用一些特殊符号,使得使用者可以方便轻松地实现查找、删除、替换等功能。

Vi 中经常会使用到正则表达式,为了充分发挥 shell 编程的威力,Linux 使用者需要精通正则表达式。

正则表达式特殊符号

首先是正则表达式的特殊符号:

[:alnum:]代表英文大小写字母及数字
[:alpha:]代表英文大小写字母
[:blank:]代表空格和 tab 键
[:cntrl:]键盘上的控制按键,如 CR,LF,TAB,DEL
[:digit:]代表数字
[:graph:]代表空白字符以外的其他
[:lower:]小写字母
[:print:]可以被打印出来的任何字符
[:punct:]代表标点符号
[:upper:]代表大写字母
[:space:]任何会产生空白的字符如空格,tab,CR 等
[:xdigit:]代表 16进位的数字类型
特殊符号实例

在 WebIDE 中使用 touch 命令或图形界面新建一个 .txt 文件并将下文中的文本内容复制进去。

touch regular_express.txt

也可以使用 wget 指令从本节开头的实验环境说明处下载,这两种方式取得的文件是一样的。

文本内容为:

"Open Source"is a good mechanism to develop programs.
apple ismy favorite food.
Football game isnotuse feet only.
this dress doesn't fit me.
However, this dress is about \$ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '\*'is represented as start.
Oh!My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with"glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

使用特殊符号查找小写字母:

grep -n '[[:lower:]]' regular_express.txt

红色为匹配成功的字符

使用特殊符号查找数字:

grep -n '[[:digit:]]' regular_express.txt

- name: check file
  script: |
#!/bin/bash
    ls /home/project/regular_express.txt
  error: /home/project 目录下没有 regular_express.txt 文件

语系对正则表达式的影响

我们知道,计算机可以直接处理的文件中只有 0 和 1,我们看到的字符文字和数字都是通过编码表转换而来的。不同语系的编码不同会导致不同语系的数据选取结果有所差异。以英文大小写为例,zh_CN.big5 及 C 这两种语系差异如下:

  • LANG=C 时:0 1 2 3 4....A B C D E...Z a b c d e...z

  • LANG=zh_CN.big5 时:0 1 2 3 4...a A b B c C d D.....z Z

在使用正则表达式 [A-Z] 时, LANG=C 的情况下,找到的是大写字符 A B C D...Z。而在 LANG=zh_CN.big5 的情况下,会选取到 A b B c C d D...z Z。所以在使用正则表达式时要特别留意语系。

由于我们一般使用的是兼容于 POSIX 的标准,因此建议使用 C 语系。

需要说明的是,我们实验环境使用的 WebIDE 的默认语系 zh_CN.UTF-8 并没有该编码问题,可以直接使用。

可以使用 echo $LANG 指令查看当前语系。

篇幅有限,更多正则表达式教程,欢迎大家来实验楼免费学习!

????????????点击阅读原文,学习完整课程内容~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值