您的位置:首页 > 其它

Regex

2016-06-20 16:12 127 查看
应用示例,查重复单词:

查多个文件,挑出包含重复单词的行,高亮标记,能知道来自哪行
可跨行查找
可不区分大小写,可间隔任意数量的各种空格
可查找被html tag分隔的重复单词 如 <b>very</b> very

egrep/sed

示例:

^(Subject|From):      以From:或者Subject:开头的行
ip地址改字体  s!<H1>([0-9]+(\.[0-9]+){3})!<H2>$1</H2>!
<H[123456]>匹配<H1><H2>等
匹配引号最简单的例子 "[^"]*"(不能处理中间存在转移引号的情况)
想用<.*>来匹配html中的tag是危险的,也会匹配到<I>shott</I>
时间如 9:17 am,[0-9]?[0-9]:[0-9][0-9] (am|pm)是不对的,应该是(1[012]|[0-9]):[0-5][0-9] (am|pm)
24小时制: ([01][0-9])|2[0-3]

Egrep元字符:

行的起始和结尾:^和$
形成习惯,不要认为^Cat匹配的是以Cat开头的行,而是Cat,只不过这个Cat位于行的开头。不是行,是单词。

字符组[]:
只有在[]内部,"-"才是元字符,如0-9,在外部,是普通字符。并且"-"放在开始时,是普通字符,如[-/.],在[0-9]是元字符。
字符组内部,"."是普通字符,在外部匹配任意字符
字符组内部,^表示非,在外部表示行的开始
注意:字符组必须匹配一个字符,即使是[^u]也必须匹配一个字符,只不过这个字符不是u。所以,如果Iraq后面的字符被截取掉了,q[^u]不会匹配;但如果Iraq后面有空格等,仍可匹配。

点号“.":匹配任何字符。
多选结构"|":
Jeffery|Jeffrey  等同于 Jeff(ery|rey)、Jeff(er|re)y

忽略大小写: 
egrep命令行参数 egrep -i '^(From|Subject):' mailbox

单词分界符
\<和\>。单词的开始和结束。
注意:实际上匹配的是位置

可选项元素"?"
其他量词:  + *
括号及反向引用:
egrep -i '\<([a-z]+) +\1\>' files  
因为-i了所以无需[a-zA-Z]
两边加上\<和\>,中间的空格用+而不是*,相当于保障两个部分是独立的单词,不是其他单词的一部分

写正则表达式,需要在对欲检索文本的了解程度与检索精确性之间求得平衡。

Perl与egrep不属于一个正则流派

Per简单入门

变量以$开头,$a = 30;  $b = $a * 5,可以保存一个数值或任意长度文本
#作为注释
变量可以出现在双引号中,比如"一共$a元"
执行命令 % perl -w hellowworld.   类似于java
if( $reply =~ m/^[0-9]+$/ ),其中=~ 是匹配运算符。(=是赋值、==是判断)
$value = <STDIN> #从用户处接受一个输入
chomp($value) 去掉$value后面的换行符

$1$2$3,从最左边的括号开始匹配。
[ \t]*和( *|\t*)的区别,后者不允许匹配空格和制表符的混合体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: