星號(*)元字元表示它前面的正規表示式能夠出現零次或多次。也就是說,假設它改動了單個字元。那麼該字元能夠在那裡也能夠不在那裡,而且假設它在那裡,那可能會不止出現乙個。能夠使用星號元字元匹配出如今引號中的單詞。
□"*hypertext"*□
無論單詞"hypertext"是否出如今引號中都會被匹配。
並且,假設由星號修飾的字元確實存在。那麼有可能出現多次。
比如,我們來看一系列數字:15
1050
100500
1000
5000
正規表示式[15]0*將匹配全部的行,並且則表示式[15]00*匹配除前兩行以外的全部的行。
第乙個0是字面值,可是第二個由星號修飾,意味著它可能出現也可能不出現。
經常使用類似的方法匹配乙個或多個(而不是0個或多個)空格,能夠使用以下的表示式來完畢:
□□*當星號元字元前面有句點元字元時,匹配隨意數目的字元。
這可用於標識兩個固定的字串之間的字元的跨度。假設想要匹配引號中的隨意字串,能夠指定:
".*"
它匹配該行上的第乙個引號和最後乙個引號之間的全部字元以及引號。使用".*"進行匹配的範圍總是最大的。
眼下它似乎並不重要,可是一旦學習替換被匹配的字串時這就非常重要了。
作為還有乙個樣例,一對尖括號標記語言中用來包圍格式化指令的普通符號,標記語言如html。通過指定以下的表示式能夠列印帶有標記的全部的行:
$ grep
' <.*>' sample
當星號用於修飾字元類時,則能夠匹配類中的隨意數目的字元。
比如以下5行的演示樣例檔案:
i can do it
i cannot do it
i can not do it
i can' t do it
i cant do it
假設我們想要匹配以上語句中的否定語句,但不匹配肯定語句,能夠使用以下的正規表示式:
can[ no' ]*t
星號使得類中的隨意字元以隨意順序匹配,而且匹配隨意多次的出現。例如以下所看到的:
$ grep
"can[ no' ]*t" sample
i cannot
do it
i can not
do it
i can
' t do it
i cant do it
有4個成功和1個失敗(肯定語句)。注意假設正規表示式試圖匹配字串"can"和"t"之間的隨意個字元,例如以下例所看到的:
can.*t
它將匹配全部的行。
技術術語"closure (閉合)"有匹配"零次或多次"的能力。egrep和awk使用的元字元擴充套件集提供了幾個很實用的closure 的變化。加號(+)匹配前面的正規表示式的一次或多次出現。前面匹配乙個或多個空格的演示樣例能夠簡化為:
□+元字元加號能夠被覺得是"至少乙個"的前導字元。其實,它和很多人使用的"*"號相相應。
問號(?)匹配零次或一次出現。比如,在前面的演示樣例中,我們使用正規表示式匹配"80286" 、"80386" 和" 80486" 。
假設我們還想匹配字串"8086" ,能夠用egrep 或awk編寫正規表示式:
80[234]?
86它匹配"80"後面跟有乙個2 ,乙個3 ,乙個4,或者沒有字元,然後跟字串"86"。不要混淆表示式中的?和shell中的?
萬用字元。shell 中的?表示單個字元。等效於正規表示式中的"."
參考資料:
Linux正規表示式 重複出現的字元
星號 元字元表示它前面的正規表示式可以出現零次或多次。也就是說,如果它修改了單個字元,那麼該字元可以在那裡也可以不在那裡,並且如果它在那裡,那可能會不止出現乙個。可以使用星號元字元匹配出現在引號中的單詞。hypertext 不管單詞 hypertext 是否出現在引號中都會被匹配。而且,如果由星號修...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...
linux正規表示式 Linux 的正規表示式
我們通過sed或awk工具可以輕鬆愉快的對一堆文字分析 對資料進行處理 伺服器報錯日誌的分析 伺服器使用者訪問日誌統計分析等。但是要玩耍好sed和awk工具,正規表示式是基礎,不得不掌握。特定字元 如 1 a a 範圍字元數字字元 0 9 代表0到9數字中的任意乙個 小寫字元 a z 代表a到z字母...