Regular Expression
最近看了一本书,《正则表达式必知必会》,整理了学习笔记
正则表达式的用途:
搜索
替换
如何理解正则表达式:
内置于其他语言或软件产品里的“迷你”语言
区分字母大小写
-------
. 匹配任意单个字符
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep book.
book.xls
book2.xls
book3.xls
[root@localhost tmp]# cat a.txt | grep .a..
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep .a.\.xls //转义
na1.xls
na2.xls
[root@localhost tmp]#
匹配字符集合中的任意一个字符
[] 定义一个字符集合
[A-Za-z0-9] 区间
[abc] 列举
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep k[23]
book2.xls
book3.xls
[root@localhost tmp]#
^ 对字符集合进行取非匹配
[^0-9] 匹配非0-9的字符
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep k[^2]
book.xls
book3.xls
[root@localhost tmp]#
------
元字符:在正则表达式里有特殊含义的字符
空白元字符
[\b] 回退并删除 Backspace
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
类元字符
\d 任何一个数字字符 等价于 [0-9]
\D 任何一个非数字字符 等价于 [^0-9]
\w 任何一个字母(大小写均可) 数字 以及下划线 等价于 [A-Za-z0-9_]
\W 任何一个非字母数字或非下划线字符 等价于 [^A-za-z0-9_]
\s 任何一个空白字符 等价于 [\f\n\r\t\v] // [\b]元字符是个特例,它不在类元字符\s的覆盖范围内
\S 任何一个非空白字符 等价于 [^\f\n\r\t\v]
------------------
重复匹配
+ 匹配一个或多个字符(或字符集合)
\d+ 一个或多个数字
[\d.]+ 一个或多个数字及.字符
* 匹配零个或多个字符(或字符集合)
\d* 数字是可选的,可以没有,也可以有多个
[\d.]* 数字及.字符是可选的,可以没有,也可以有多个
? 匹配零个或一个字符(或字符集合)
https? 匹配http或者https
{3} 给匹配次数设定一个精确的值
#[[:xdigit:]]{6} 十六进制数字匹配6次,如匹配#00FFBB
{2,4} 给匹配次数设定一个区间
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
上面的正则表达式将匹配:
4/8/03
10-6-2004
{3,} 给匹配次数设定一个最小值
\$\d{3,}
上面的正则表达式将匹配:
$222
$1200
$67000
元字符分 贪婪型 和 懒惰型 两种
常用贪婪型元字符和它们的懒惰型版本:
+ +?
* *?
{n,} {n,}?
----------
位置匹配
\b 单词边界 格式:\bcat cat\b \bcat\b
\B 非单词边界
^ 字符串边界,开头位置
$ 字符串边界,结尾位置
(?m) 分行匹配 m:multiline mode
^ $ 跟 (?m) 一起使用,正则表达式引擎会把 行分隔符 当作一个 字符串分隔符 来对待,^ 和 $ 还将匹配换行符开头或结尾的字符串
-----------
子表达式
( ){2}
匹配结果
如果是 {2} 会把{2}前面的;符号重复2次 匹配结果如 ;;;
子表达式的作用:对重复次数元字符的作用对象做出精确的控制
(19|20)\d{2}
| 或操作符
匹配年份,结果如1990,2012等
如果是19|20\d{2},则解释为19或20\d{2} 因为|符号把位于它左边和右边的两个部分都作为一个整体来看待
子表达式的作用:对|操作符的OR条件做出准确定义
子表达式可以嵌套
最近看了一本书,《正则表达式必知必会》,整理了学习笔记
正则表达式的用途:
搜索
替换
如何理解正则表达式:
内置于其他语言或软件产品里的“迷你”语言
区分字母大小写
-------
. 匹配任意单个字符
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep book.
book.xls
book2.xls
book3.xls
[root@localhost tmp]# cat a.txt | grep .a..
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep .a.\.xls //转义
na1.xls
na2.xls
[root@localhost tmp]#
匹配字符集合中的任意一个字符
[] 定义一个字符集合
[A-Za-z0-9] 区间
[abc] 列举
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep k[23]
book2.xls
book3.xls
[root@localhost tmp]#
^ 对字符集合进行取非匹配
[^0-9] 匹配非0-9的字符
[root@localhost tmp]# cat a.txt
book.xls
book2.xls
book3.xls
na1.xls
na2.xls
sa.xls
[root@localhost tmp]# cat a.txt | grep k[^2]
book.xls
book3.xls
[root@localhost tmp]#
------
元字符:在正则表达式里有特殊含义的字符
空白元字符
[\b] 回退并删除 Backspace
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
类元字符
\d 任何一个数字字符 等价于 [0-9]
\D 任何一个非数字字符 等价于 [^0-9]
\w 任何一个字母(大小写均可) 数字 以及下划线 等价于 [A-Za-z0-9_]
\W 任何一个非字母数字或非下划线字符 等价于 [^A-za-z0-9_]
\s 任何一个空白字符 等价于 [\f\n\r\t\v] // [\b]元字符是个特例,它不在类元字符\s的覆盖范围内
\S 任何一个非空白字符 等价于 [^\f\n\r\t\v]
------------------
重复匹配
+ 匹配一个或多个字符(或字符集合)
\d+ 一个或多个数字
[\d.]+ 一个或多个数字及.字符
* 匹配零个或多个字符(或字符集合)
\d* 数字是可选的,可以没有,也可以有多个
[\d.]* 数字及.字符是可选的,可以没有,也可以有多个
? 匹配零个或一个字符(或字符集合)
https? 匹配http或者https
{3} 给匹配次数设定一个精确的值
#[[:xdigit:]]{6} 十六进制数字匹配6次,如匹配#00FFBB
{2,4} 给匹配次数设定一个区间
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
上面的正则表达式将匹配:
4/8/03
10-6-2004
{3,} 给匹配次数设定一个最小值
\$\d{3,}
上面的正则表达式将匹配:
$222
$1200
$67000
元字符分 贪婪型 和 懒惰型 两种
常用贪婪型元字符和它们的懒惰型版本:
+ +?
* *?
{n,} {n,}?
----------
位置匹配
\b 单词边界 格式:\bcat cat\b \bcat\b
\B 非单词边界
^ 字符串边界,开头位置
$ 字符串边界,结尾位置
(?m) 分行匹配 m:multiline mode
^ $ 跟 (?m) 一起使用,正则表达式引擎会把 行分隔符 当作一个 字符串分隔符 来对待,^ 和 $ 还将匹配换行符开头或结尾的字符串
-----------
子表达式
( ){2}
匹配结果
如果是 {2} 会把{2}前面的;符号重复2次 匹配结果如 ;;;
子表达式的作用:对重复次数元字符的作用对象做出精确的控制
(19|20)\d{2}
| 或操作符
匹配年份,结果如1990,2012等
如果是19|20\d{2},则解释为19或20\d{2} 因为|符号把位于它左边和右边的两个部分都作为一个整体来看待
子表达式的作用:对|操作符的OR条件做出准确定义
子表达式可以嵌套