正则表达式:缓冲相同的字符

时间:2016-04-30 12:44:23

标签: regex linux string grep

我想用正则表达式搜索3个相同字符的文本。例如(111,***,!!!,999)

我尝试了什么:

首先尝试(\w{3})|(\d{3})\1

第二次尝试[\w+]{3}|[\d+]{3}\1

2 个答案:

答案 0 :(得分:2)

如果您使用的是bash shell,则可以使用:

egrep 'aaa'
egrep '111'

等等

如果您使用的是Java等编程语言,可以使用以下内容:

Pattern pattern = Pattern.compile("([a-z\\d])\\1\\1", Pattern.CASE_INSENSITIVE);

\\ 1用于匹配最后选择的组,因此连续使用它可以匹配任意数量的字符。

答案 1 :(得分:1)

grep中,您可以启用扩展模式选项-E,该选项将启用反向引用并使用以下正则表达式:

grep -E '(.)\1\1' < file

它将发出包含三个连续相等字符的所有行。例如,如果文件是:

aaa
aab
bab
bbb
aaccca
asdad
!!!
999

这将导致:

$ grep -E '(.)\1\1' < testin2
aaa
bbb
aaccca
!!!
999

正则表达式的工作方式如下:点(.)匹配每个字符(尽管不考虑新行)。现在,因为我们将它放在括号(.)之间,所以可以使用反向引用组进行引用。接下来,我们编写两个连续的\1,以便正则表达式寻找由点匹配的模式 - 因此一个字符 - 再重复两次而其间没有其他字符。

如果想要发出三个连续字符,您可以传递grep -o参数:

$ grep -P '(.)\1\1' < testin2
aaa
bbb
aaccca
!!!
999