Linux正規表示式 重複出現的字元

2022-09-23 17:03:15 字數 1586 閱讀 3929

星號(*)元字元表示它前面的正規表示式可以出現零次或多次。也就是說,如果它修改了單個字元,那麼該字元可以在那裡也可以不在那裡,並且如果它在那裡,那可能會不止出現乙個。可以使用星號元字元匹配出現在引號中的單詞。

□"*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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...

正規表示式(三) 正規表示式中的重複

我們在之前知道了正規表示式元字元的概念,再結合上重複的概念,才能寫出來一些相對高階的正規表示式。因為在實際的正規表示式的使用過程中,我們肯定不是那麼簡單的只用元字元來進行一些簡單的匹配,一般情況下還需要配合上重複的概念才能從乙個很長很亂的字串中匹配出我們想要的東西。下面我們會從下面的幾個方面來進行正...