我想在具有正則表達式的文本中搜索3個相同的字符。例如:(111 *** !!!,999)正則表達式:緩衝區相同的字符
我的嘗試:
第一次嘗試:(\w{3})|(\d{3})\1
第二嘗試:[\w+]{3}|[\d+]{3}\1
我想在具有正則表達式的文本中搜索3個相同的字符。例如:(111 *** !!!,999)正則表達式:緩衝區相同的字符
我的嘗試:
第一次嘗試:(\w{3})|(\d{3})\1
第二嘗試:[\w+]{3}|[\d+]{3}\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
s,這樣正則表達式正在尋找與點相匹配的模式 - 因此 - 要重複另外兩次,其間沒有其他字符。
如果只要發出三個連續的字符,你可以通過grep
的-o
參數:
$ grep -P '(.)\1\1' < testin2
aaa
bbb
aaccca
!!!
999
如果你正在使用bash shell,則可以使用:
egrep 'aaa'
egrep '111'
等等
如果你使用的是像Java這樣的編程語言,你可以使用一些東西像:
Pattern pattern = Pattern.compile("([a-z\\d])\\1\\1", Pattern.CASE_INSENSITIVE);
的\\ 1用於匹配到最後選定組和因此使用它連續按需要可以匹配儘可能多的字符。
'grep'的擴展模式也允許反向引用。 –
你想用什麼工具? 'linux'本身不是一個正則表達式工具。 –
「'工具'」是什麼意思?我唯一想要的是在文本中搜索同名字符:) –
字符應該是連續的嗎?問題仍然是你將用來處理正則表達式的工具:'grep'? 'sed'? 'awk'? –