星号(*)元字符表示它前面的正則表達式能够出现零次或多次。也就是说,假设它改动了单个字符。那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个。能够使用星号元字符匹配出如今引號中的单词。

□"*hypertext"*□

无论单词"hypertext"是否出如今引號中都会被匹配。

并且,假设由星号修饰的字符确实存在。那么有可能出现多次。

比如,我们来看一系列数字:

1

5

10

50

100

500

1000

5000

正則表達式[15]0*将匹配全部的行,并且则表达式[15]00*匹配除前两行以外的全部的行。

第一个0是字面值,可是第二个由星号修饰,意味着它可能出现也可能不出现。

经常使用类似的方法匹配一个或多个(而不是0个或多个)空格,能够使用以下的表达式来完毕:

□□*

当星号元字符前面有句点元字符时,匹配随意数目的字符。

这可用于标识两个固定的字符串之间的字符的跨度。假设想要匹配引號中的随意字符串,能够指定:

".*"

它匹配该行上的第一个引號和最后一个引號之间的全部字符以及引號。使用".*"进行匹配的范围总是最大的。

眼下它似乎并不重要,可是一旦学习替换被匹配的字符串时这就非常重要了。

作为还有一个样例,一对尖括号标记语言中用来包围格式化指令的普通符号,标记语言如HTML。通过指定以下的表达式能够打印带有标记的全部的行:

$ grep ' <.*>' sample

当星号用于修饰字符类时,则能够匹配类中的随意数目的字符。

比如以下5行的演示样例文件:

I can do it

I cannot do it

I can not do it

I can' t do it

I cant do it

假设我们想要匹配以上语句中的否定语句,但不匹配肯定语句,能够使用以下的正則表達式:

can[ no' ]*t

星号使得类中的随意字符以随意顺序匹配,而且匹配随意多次的出现。例如以下所看到的:

$ grep "can[ no' ]*t" sample

I cannot do it

I can not do it

I can' t do it

I cant do it

有4个成功和1个失败(肯定语句)。注意假设正則表達式试图匹配字符串"can"和"t"之间的随意个字符,例如以下例所看到的:

can.*t

它将匹配全部的行。

技术术语"closure (闭合)"有匹配"零次或多次"的能力。egrep和awk使用的元字符扩展集提供了几个很实用的closure 的变化。加号(+)匹配前面的正則表達式的一次或多次出现。前面匹配一个或多个空格的演示样例能够简化为:

□+

元字符加号能够被觉得是"至少一个"的前导字符。其实,它和很多人使用的"*"号相相应。

问号(?)匹配零次或一次出现。比如,在前面的演示样例中,我们使用正則表達式匹配"80286" 、"80386" 和" 80486" 。

假设我们还想匹配字符串"8086" ,能够用egrep 或awk编写正則表達式:

80[234]?

86

它匹配"80"后面跟有一个2 ,一个3 ,一个4,或者没有字符,然后跟字符串"86"。不要混淆表达式中的?和shell中的?

通配符。Shell 中的?表示单个字符。等效于正則表達式中的"."

參考资料:http://www.linuxawk.com/communication/436.html

Linux正則表達式-反复出现的字符的更多相关文章

  1. Linux正則表達式-定位元字符

    有两个元字符用于指定字符串出如今行首或行末.脱字符(^)是指示開始的单字符正則表達式.美元符号($)是指示行结尾的单字符的正則表達式.这些通常称为"定位符",由于它们将匹配限定在特 ...

  2. linux系统之shell编程-正則表達式

    shell编程正則表達式: 1:元字符   [ ]  .   *  ? + ( )  |  {  }  ^  $ 2 : [a-z0-9]  表示匹配随意数字和字母的一个 3 :  [^a-z]    ...

  3. Python正則表達式:怎样使用正則表達式

    正則表達式(简称RE)本质上能够看作一个小的.高度专业化的编程语言,在Python中能够通过re模块使用它.使用正則表達式,你须要为想要匹配的字符串集合指定一套规则,字符串集合能够包括英文句子.e-m ...

  4. javascript正則表達式

    定义一个正則表達式 能够用字面量 var regex = /xyz/; var regex = /xyz/i; 也能够用构造函数 var regex = new RegExp('xyz'); var ...

  5. Java正則表達式入门

     众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...

  6. JAVA中正則表達式总结

    昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...

  7. 经常使用的正則表達式归纳—JavaScript正則表達式

    来源:http://www.ido321.com/856.html 1.正则优先级 首先看一下正則表達式的优先级,下表从最高优先级到最低优先级列出各种正則表達式操作符的优先权顺序: 2.经常使用的正則 ...

  8. Java之正則表達式【使用语法】

    认为好就顶一个!! ! ! 3.正則表達式 用一些特殊的有意义的字符组成的字符串(死记) 原子:正則表達式的最基本组成单位 正則表達式特殊意义的字符:   .  *  +  ?不能单独表示它们,假设非 ...

  9. python之路-------字符串与正則表達式

    1.1.#####去掉字符串中的转义符string.strip() print "hello\tworld\n" >>> word="\thello w ...

随机推荐

  1. [RxJS] Stopping a Stream with TakeUntil

    Observables often need to be stopped before they are completed. This lesson shows how to use takeUnt ...

  2. spring 通过工厂方法配置Bean

    概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...

  3. UIActivityIndicatorView活动控制器的大小改变

    self.activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicat ...

  4. JS--显示类型转换Number—隐式类型转换

    显示类型转换 (强制类型转换):Number()parseInt()parseFloat() Number是整体转换--能够把一个看起来像数字的字符串转成数字--尽量去转换能转的都转了 var a = ...

  5. AutoMapper2

    1.嵌套映射 namespace Second { class Program { static void Main(string[] args) { Mapper.CreateMap<Oute ...

  6. Android -------- API等级

      API等级 Android版本 代号名称(基本上是按ABC命名排序的) 注释说明 1 Android 1.0     2 Android 1.1 Petit Four   3 Android 1. ...

  7. iOS — Autolayout之Masonry解读

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  8. Iterable 超级接口

    这是一个老祖宗,一代一代往下拨 collection 的方法如下,是一个跟接口方法如下,见API collection  : add():添加一个元素 addAll():添加一组元素 clear(); ...

  9. 《转载》深入理解 cocos2d-x 坐标系

    原文地址:http://www.cnblogs.com/lyout/p/3292702.html. 首先我们添加两个测试精灵(宽:27,高:40)到场景里面: CCSprite *sprite1 = ...

  10. (原创) ubuntu 12.04 install nvidia by the deb

    先安装 驱动 1. sudo dpkg -i  XXX.deb 2. sudo apt-get update 3. sudo apt-get install cuda 4. gedit ~/.bash ...