1.什么叫做正则表达式?
正则表达式是用于描述字符排列和匹配模式的一种语法规则。
他主要用于字符串的模式分隔、匹配、查找及替换操作
2.正则表示式和shell中的通配符的区别有哪些?
- 正则表达式用来匹配符合条件的字符串,而通配符是用来匹配条件的文件名
- 正则是包含匹配,而通配符是完全匹配
- grep、awk、sed等命令可以支持正则表达式,而find、cp这些命令支持shell自己的通配符来进行匹配
3.基础正则表达式
^ --> 表示以……开头的行
$ --> 表示以……结尾的行
. --> 任意一个字符
* --> 表示前一个字符出现0次、1次或多次
.* --> 表示匹配所有字符
[abc] --> 匹配a或b或c字符
[^a] --> 表示排除a字符
[^a^] --> 表示排除a或^字符
4.扩展正则表达式
+ --> 表示前一个字符出现一次或多次
() --> 把括号里的内容变成整体,sed反向引用
{m,n} --> 表示前一个字符出现m到n次
{m,} --> 表示前一个字符出现至少m次
{m} --> 表示前一个字符出现m次
5.注意\
转义符
\.$
表示的就是匹配以.
结尾的行\{n\}
表示的是前面的字符恰好出现n次
注意:’{n}'在进行使用的时候要格外注意一个概念那就是,正则表达式是包含匹配
例如现给出下面一个文件:grep.txt
[root@foundation8 test]# cat grep.txt
a
aa
aaa
aaaa
aaaaa
b
bb
bbb
bbbb
bbbbb
目标要求:提取出含有aaa的行
正则表达式理论上是这样写的:grep "a\{3\}" grep.txt
Linux是实践出真相的,我们操作出来的结果却是下面这个样子,和我们想象的不太一样阿~
难道是我们出错了?不是的。
只是因为我们犯了逻辑上的一个误区:aaaa和aaaaa中同样也存在a恰好出现3次的情况,所以匹配结果是没有错误的。
那么,如果你想要匹配出满意的结果,只能借助定界符号,即就是特殊标志,如果还是不懂,您往下继续看~
给出一个文件grep.txt
:
[root@foundation8 test]# cat grep.txt
xaaa
xaaaa
aaax
aaaax
xaaax
同样的要求,我们会发现aaa的左右两边各有一个不同于a的字母x,这时x就作为了定界符号
[root@foundation8 test]# grep "xa\{3\}" grep.txt
xaaa
xaaaa
xaaax
[root@foundation8 test]# grep "a\{3\}x" grep.txt
aaax
aaaax
xaaax
[root@foundation8 test]# grep "xa\{3\}x" grep.txt
xaaax
6.正则表达式练习
实例1::从字符串 str 中提取数字部分的内容(匹配一次)
var str = “abc123def”;
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
未完待续…