正则表达式---使用注意点

#include <stdio.h>

int main(void)
{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}

int main(void)
{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}

intintint main(void)

{
printf("hello\n");
printf("I am mini2440. And Wish you be a best man!\n");
return 0;
}

 

^和*的使用

^只允许在一行的开始匹配字符或单词。

比如 grep ^int hello.c

但是 grep ^* hello.c 这样结果是空

我觉得应该这样理解,^必须要给定一个指定的匹配模式,否则它不知道在每一行寻找以什么为开头的。

grep ^int*int hello.c 可以找到结果

grep ^in*t hello.c 可以找到结果

grep -r ^in*t hello.c 可以找到结果

grep ^i*t hello.c   却找不到结果???  //0到任意次的i + t                      结果当然是空

grep ^*t hello.c    找不到结果???    //0到任意次的空字符 + t               结果当然是空

grep ^* hello.c    找不到结果???     //0到任意次的空(即为空)(首行) 结果当然是空

grep * hello.c      也找不到结果???  //0到任意次的空字符                      结果当然是空

在群里大家的帮助下终于搞明白了,

* 表示前面字符的0到任意次重复

l* 就表示 0到任意次的l的组合

 

摘自鸟哥:

因为 * 代表的是『重复 0 个或多个前面的  字符』的意义, 因此,『o*』代表癿是:『拥有空字符或一个 o 以上的字符』,

特别注意,因为允讲空字符(就是有没有字符都可以的意思),因此,『 grep -n 'o*' regular_express.txt 』将会把所有的数据都打印出杢屏幕上!

那如果是『oo*』呢?则第一个 o 肯定必须要存在,第二个 o 则是可有可无的多个 o , 所以,凡是含有 o, oo, ooo, oooo 等等,都可以被列出来~

 

[ou] .*t
匹配以字母o或u开头,后跟任意一个字符任意次,并以t结尾的任意字母。

注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]

 

shell中使用 \ 或者 '' "" 输入特殊字符

grep \. 匹配.

但是在shell中敲入时,grep \\. hello.c  或者 grep ‘\.’ hello.c 或者 grep "\." hello.c

这是因为:

shell的\也是转义 如果你用grep \. hello.c  

实际传入的参数是. 而不是\. 

如果使用了'' 里面的表示\. 中\当字符处理了

或者\\ 已经把\当一般字符处理 故 可以传\

 

使用\{\}匹配模式结果出现的次数

pattern\{n\} 匹配模式出现n次。
pattern\{n,\} 匹配模式出现最少n次。
pattern\{n,m} 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。


grep命令使用

http://baike.baidu.com/view/1057278.htm

学习正则表达式教程: 张子阳 写的 正则表达式

posted @ 2012-04-05 10:25  望月追忆  阅读(279)  评论(0编辑  收藏  举报