我想用正则表达式搜索3个相同字符的文本。例如(111,***,!!!,999)
我尝试了什么:
首先尝试:(\w{3})|(\d{3})\1
第二次尝试:[\w+]{3}|[\d+]{3}\1
答案 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