Regular-Expression

理解/.*/的問題

  • November 29, 2018

/.*/根據書中所寫的內容,我有問題理解,這會列印整行文本。我們知道這.意味著任何字元,並且*意味著前面的字元出現零次或多次。所以我希望 /.*/ 找到類似的東西rrr qqqq abbbbb,我的意思是不斷重複單個字元。

但這不是它所做的事情。為什麼?

我的第二個問題是:為什麼/.+/不做同樣的事情?在我正在嘗試的文本中,結果是?

不,*in.*表示“任意數量的前面的表達式”,即零個或多個與表達式匹配的任何類型的字元.

這意味著.*將匹配aaaa以及因為匹配中abcd的所有字元。它也將匹配一個空行,因為它允許匹配。abcd``.

如果您想查找包含重複字元的行,請使用

/\(.\)\1\1*/

此表達式匹配“任何字元,然後是相同字元,然後是任意數量的相同字元”。\1*除非您正在尋找包含重複字元的行,否則可以將其刪除,在這種情況下,您應該將表達式錨定到行的開頭和結尾,如

/^\(.\)\1\1*$/

ed編輯器支持基本的正則表達式。該+修飾符是一個擴展的正則表達式修飾符。如果您使用該命令啟用了錯誤解釋,那麼您在使用時?獲得的將緊隨其後(或在 GNU 中)。這是因為它試圖找到其中有 a 的行,前面有一些其他字元。ed``/.+/``no match``No match``ed``H``+

擴展正.+則表達式(“匹配一個或多個任意字元”)等價於基本正則表達式..*,即“匹配一個字元,然後匹配零個或多個任意字元”。

根據其手冊,GNUed應該支持\+正則表達式,因此..*相當於.\+,但我的 OpenBSD 系統上的 GNU ed1.14.2 不這樣做。

引用自:https://unix.stackexchange.com/questions/460619