Regular-Expression
理解/.*/的問題
/.*/
根據書中所寫的內容,我有問題理解,這會列印整行文本。我們知道這.
意味著任何字元,並且*
意味著前面的字元出現零次或多次。所以我希望 /.*/ 找到類似的東西rrr
qqqq
abbbbb
,我的意思是不斷重複單個字元。但這不是它所做的事情。為什麼?
我的第二個問題是:為什麼
/.+/
不做同樣的事情?在我正在嘗試的文本中,結果是?
不,
*
in.*
表示“任意數量的前面的表達式”,即零個或多個與表達式匹配的任何類型的字元.
。這意味著
.*
將匹配aaaa
以及因為匹配中abcd
的所有字元。它也將匹配一個空行,因為它允許零匹配。abcd``.
如果您想查找包含重複字元的行,請使用
/\(.\)\1\1*/
此表達式匹配“任何字元,然後是相同字元,然後是任意數量的相同字元”。
\1*
除非您正在尋找僅包含重複字元的行,否則可以將其刪除,在這種情況下,您應該將表達式錨定到行的開頭和結尾,如/^\(.\)\1\1*$/
ed
編輯器支持基本的正則表達式。該+
修飾符是一個擴展的正則表達式修飾符。如果您使用該命令啟用了錯誤解釋,那麼您在使用時?
獲得的將緊隨其後(或在 GNU 中)。這是因為它試圖找到其中有 a 的行,前面有一些其他字元。ed``/.+/``no match``No match``ed``H``+
擴展正
.+
則表達式(“匹配一個或多個任意字元”)等價於基本正則表達式..*
,即“匹配一個字元,然後匹配零個或多個任意字元”。根據其手冊,GNU
ed
應該支持\+
正則表達式,因此..*
相當於.\+
,但我的 OpenBSD 系統上的 GNUed
1.14.2 不這樣做。