今天回顾了有关正则表达式的一些知识,就拿出来写写,为自己整理整理,防止以后万一忘了,能快速的查找到!当然这种概率应该是很小的。同时也希望能同大家一起分享学习的快乐!呵呵,不多说了,赶快写写睡觉觉了!
既然是说正则表达式,那么什么是正则表达式呢?由于表达能力欠缺,就将网上的定义复制下来与大家分享一下吧!
在计算机科学中,正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。
那么在Linux中的正则表达式有哪儿些元字符呢?下面就将这些字符都列出来:
^PATTERN :行首锚定符; 其实就是将位于行首且匹配我们设定的模式(或者理解为条件)的那一行内容匹配出来;
PATTERN$ :行尾锚定符; 那这个就是将位于行尾且匹配我们设定的模式(条件)的那一行的内容匹配出来;
\<PATTERN:词首锚定符; 这个应该不难理解,就是匹配我们设定的模式且位于单词首部的内容匹配出来,而不是将匹配我们设定的模式但不是位于词首的内容匹配出来。简单的举个例子:有abc,aabcc这两个字符串,我们设定的匹配模式是这样:\<abc.*。那么这只能将abc给匹配出来,而不能将aabcc匹配出来;
PATTERN\>:词尾锚定符;
. :匹配任意单个字符;
* :匹配此前的字符0到任意次; 例如:a*b可以匹配出ab,aab,b,aaab等字符或内容,但是却无法匹配出acb,abb等。
.* : 匹配任意长度的任意字符,默认工作在贪婪模式:尽可能长的匹配符合模式的字符串;
? : 匹配此前的字符0次或1次; 这个类似*这个元字符,但是次数比较少而已。
\{m,n\} :匹配此前的字符至少m次,至多n次;
[] : 匹配指定范围内的任意单个字符;
[^] :匹配指定范围外的任意单个字符;
\(\) \1 :前面的标记匹配到的字符,\1用来引用此前括号中出现的字符; 这个举个例子:有255.255.252.0这样一串字符。我们可以这样写匹配模式:\(255\)\.\1\.252\.0给精确的匹配出来。
从上面的例子中我们或许有这样的疑问,为什么.前多了\呢?那是因为.在我们正则表达式中也是有含义的,而这个反斜杠就是将这个点给转义成它本来的面貌,即它就是一个点,不代表任何含义。我们也称这个反斜杠为转义符。
其实任何工具或者什么,都会随着时间和技术的进步而进步的,而我们的正则表达式也是,这就出现了扩展正则表达式,下面将它与正则表达式的不同和新添的元字符给列出来:
\{m,n\} ------ {m,n} :匹配此前的字符至少m次,至多n次;
( ) :用来匹配字符组的; 例如:’love(able|ly)’ 匹配的是loveable或lovely;
| :表示或者的意思;
+ :匹配1到n个加号前的字符;
其实在使用正则表达式来匹配内容的时候还可以与globbing(文件名通配符)配合使用,那么也将我知道的通配符也列出来吧!
*:通配任意长度的任意字符;
?:通配任意单个字符(不可以为空);
[]:取给定范围内的任意单个字符;
[^]:取给定范围以外的任意单个字符;
[:lower:]: 英文小写;
[:upper:] :英文大写;
[:digit:] : 数字;
[:alpha:] :英文(不区分大小写);
[:alnum:]: 数字加字母;
[:space:] :空格;
[:punct:] :标点符号;
就不多作解释了,后面列出些例子看看大概就明白了!
说到正则表达式(扩展正则表达式)就不得不说grep(egrep)这些强大的文本搜索工具了,它们可以使用正则表达式搜索文本,并把匹配的行打印出来。那么再让我们来了解下它的常用选项吧!
grep:
--color=(auto|always):设定显示匹配出来内容的颜色的;
-v :取反;
-i :忽略大小写;
-r :搜索多个文件,递归搜索;
-B # :匹配出来的前#行也显示出来;
-A # :匹配出来的后#行也显示出来;
-C # :匹配出来的前后#行也显示出来;
-o :只显示被模式匹配到的字符串本身,而不是那一行;
-E :扩展正则表达式。其实grep –E = egrep 。
就不再多写了,可以自己在Linux下多多练练,只有这样才可以将这些知识练熟。下面给些例子,可能有些难,但是仔细分析分析就会懂的。
1、文本中有一下两行内容,那么我们怎么将其分别匹配出来呢?
megedu magedu.com
magemu magemu.com
#grep “\(mage[dm]u\).*\1\.com”
2、最后给出个用来匹配IP地址的模式。
[root@localhost~]#grep --color=auto -o -E '([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-2][0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-5])){3}' love.txt
今天太晚了,就写到这吧!以后也会将遗漏的给补充上来,或者将错误的给更正过来。加油!