正則表達式的學習心得

1.  基本正則表達式支持的元字符

元字符描述用法舉例
.匹配任意一個字符。a., x.y, x.., .ab.
[]匹配指定範圍內的任意字符。[abc], [0-9], [a-z], [A-Z], [[:alpha:]], [[digit:]], [[:alnum:]], [[space:]], [[:upper:]], [[:lower:]], [[:punct:]]
[^]匹配指定範圍以外的任意字符,即‘[]’的取反。[^0-9], [^[:space:]], [^[:punct:]]
*對其前的字符匹配任意次。ab*, .*, *ab, xy*z, [[:space:]]*ab, xy[^[:punct:]]*
?對其前的字符匹配0次或1次。使用時要用轉義符,即’\?’ab?, [[:space:]]?ab, xy[^[:punct:]]?
{}對其前的字符匹配指定區間次。使用時要用轉義符,即’\{\}’ab\{3\}, ab\{1,\}, ab\{0,3\}, ab\{1,5\}
()分組符。使用時要用轉義符,即’\(\)’ab\(xyz\)*, \(abc\)like\(xyz\)
\num分組引用。嚴格意義上並非元字符,而是一種特定的轉義。要和分組符聯合使用纔有意義。he \(love\)s his \1r
^行首錨定符^#.*,  ^Root
$行尾錨定符china$,  ^$
<詞首錨定符。使用時要用轉義符,即’\<’\<[[:digit:]],  \<Root
>詞尾錨定符。使用時要用轉義符,即’\>’\<root\>,   \<[[:alnum:]]*\>


2.  擴展正則表達式增加的元字符

元字符描述用法舉例
+對其前的字符匹配至少1次。ab+,  ^#[[:space:]]+[^[:space:]]+
|組內多選一符。the selection is (yes|no),  user name is (root|hadoop|redhat|centos)

注: 在擴展正則表達式模式下,除了詞首錨定符’<’和詞尾錨定符’>’使用時要進行轉義外,其它元字符都不需要做轉義!

3.  grep和egrep命令常用的選項

-v     取反顯示,即顯示錶達式不匹配的行。

-o    僅顯示被匹配到的文本內容,而非整行的內容。

-i     匹配時不區分字符大小寫。

-E    使用擴展的正則表達式模式。

-A num    同時顯示匹配到的行的下面num行

-B num    同時顯示匹配到的行的上面num行

-C num    同時顯示匹配到的行的上面和下面各num行

--color=auto    對匹配到的文本內容用相應字體顏色顯示。

-q        靜默模式,即不輸出任何內容,只關心匹配的執行結果,適合在shell腳本中使用。

-e expr       有多個正則表達式條件時,每個表達式前需用 -e 進行聯合多個表達式條件。默認只有一個表達式條件時,-e 可以省略。

4.  正則表達式中關於引用的對應關係

正則表達式中使用’\1’,’\2’,’\3’… 引用前面對應的括號中的內容,遵循的原則是:左括號從左到右出現的次序。’\1’引用的內容是從左邊開始,第1個左括號開始到其對應的右括號內內容;’\2’引用的內容是從左邊開始,第2個左括號開始到其對應的右括號內內容;’\3’引用的內容是從左邊開始,第3個左括號開始到其對應的右括號內內容;以此類推。因此,從括號的層次角度,是先引用外層括號內的內容,再引用內層括號內的內容。例:

info.text:

1 xyxyabababxyab

2 xyabxyab

3 xyabxyabxyab

4 xyxyxy

5 xyxyabababxyabxyxyababab

6 xyxyabababxyabxyxyabababxyabxyab

[zjp@localhost test]$ egrep --color=auto "((xy){2}(ab){3})(\2\3)*\1\4{2}" info.text

6 xyxyabababxyabxyxyabababxyabxyab

5.  在 ` ` 中支持的字符串模式匹配操作符’=~’

  • 不需要對模式匹配操作符右邊的正則表達式加引號。

  • 支持的正則表達式是擴展的正則表達式模式。即對所有元字符都不需要進行轉義。

  • 不支持詞首錨定符’<’和詞尾錨定符’>’。

lineStr=19934567

if [[ "$lineStr" =~ ([1-9][0-9]+|1[0-9][0-9]) ]] ; then
    echo "$lineStr"
fi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章