[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]
但是这样有点笨拙。而且,它只匹配恰好八个字符的用户名。它不会匹配三到八个字符之间的名称,这通常也是有效的用户名。
正则表达式还可以包括重复修饰符。重复修饰符可以指定数量,如没有、一个、多个、一个或多个,零或一个、五到十个,以及恰好三个。重复修饰符必须与其他模式组合,修饰符本身没有含义。
例如,regex:
^[A-z][A-z0-9]{2,7}$
可以实现前面描述的用户名过滤功能。用户名 是以字母开头,后面紧跟至少两个,但不超过七个字母或数字的字符串,并且紧跟字符串结尾。
此处的位置定位点非常重要。如果没有两个位置操作符,则会错误地接受任意长度的用户名。为什么呢?请考虑 regex:
^[A-z][A-z0-9]{2,7}
此命令辨别:字符串是否以字母开头并紧跟二到七个字母?但是它未提到终止条件。因此,字符串 samuelclemens 满足条件,但是它的长度显然超出了有效用户名的范围。与此类似,省略开始定位点 ^,或同时省略两个定位点将分别匹配以类似 munster1313 结束或包含该字符串的字符串。如果必须匹配特定的长度,请记得在要求的模式的开头和结尾分别加上分隔符。
以下是其他一些示例:
可以使用 {2,} 查找两次或多次重复。regex ^G[o]{2,}gle 匹配 Google、Gooogle、Goooogle 等等。 重复修饰符 ?、+ 和 * 分别查找零次或一次、一次或多次,以及零次或多次重复。(例如,您可以将 ? 看作是 {0,1} 的简写法。)regex boys? 匹配 boy 或 boys;regex Goo?gle 匹配 Gogle 或 Google。
regex Goo+gle 匹配 Google、Gooogle、Goooogle 等等。
construct Goo*gle 匹配 Gogle、Google、Gooogle 等等。
可以将重复修饰符应用到单个字符(如上所示),还可以应用到更复杂的组合。使用 ( 和 ) 圆括号(就像数学中的用法)将修饰符应用到子表达式。下面是一个示例:给定文本文件 test.txt:The rain in Spain falls mainly
on the the plain.It was the best of of times;
it was the worst of times.
命令 grep -i -E '(/b(of|the)/W+){2,}' test.txt 将生成:
on the the plain.
It was the best of of times;
regex 操作符 /b 匹配单词边界 或 (/W/w|/w/W)。该 regex 表示“一连串完整单词‘the'或‘of'后面紧跟非文字字符。”您可能会提出疑问,为什么 /W+ 是必需的:/b 是位于单词开头或结尾的空字符串。在单词之间必须包括这一(或这些)字符,否则该 regex 将无法找到匹配。









