正則表達式是一種以一些字符賦予特殊意義之后,用來表達字符串,用以篩選各種形式的字符串用來進行查找、替換、刪除等各種文本編輯作用的一種表示方式。
正則表達式的特殊字符
字符表示
. 可以表示任意可打印字符
[] 中括號范圍內任意單個字符
[^] 中括號范圍外任意單個字符 (相對所有可打印字符)
[:space:] 表示任意單個空白字符
[:digit:] 任意單個數字
[:lower:] 任意單個小寫字母
[:upper:] 任意單個大寫字母
[:alnum:] 任意單個字母或數字
[:alpha:] 任意單個字母
[:punct:] 任意單個標點符號
[:cntrl:] 任意單個控制字符
[:graph:] 任意單個圖形字符
[:xdigit:] 任意單個十六進制字符
字符次數
* 表示一個字符重復任意次
+ 表示一個字符重復一次以上
? 表示一個字符重復一次或零次
{n} 表示重復n次
{n,m} 表示重復最少n次,最多m次
{,m} 表示重復最多m次
{n,} 表示重復最少n次
位置錨定
^ 確定位置為行首
$ 確定位置為行尾
\< 確定單詞首
\> 確定單詞尾
分組與引用 分組每一個配對的括號之間的內容就是一個分組,每一個分組就是一個整體,整體可以用最左變數第n個左括號,用\n 后項引用。
(a+(b)) \1=a+(b)
\2=b
如:顯示passwd文件中用戶名與shell名相同的行。
這個是個典型的后項引用,\1 就是引用的括號里面的內容。這才能達成用戶名與shell相同的需求。
引用模式,只能用正向思維構建,不能用反向思維構建。
就比如
用正則表達式取出一個文件的路徑 /etc/rc.d/inint.d/functions/
我想的有兩種思路,
一種直接取路徑,第二種就是先取出基名然后再取反取出路徑。
第一種就是
思路就是^鎖定詞首,./*表示之后不管路徑多長之后總是/為終點,\<表示鎖定詞首,就是說后面還有一個單詞。
第二種就是
思路就是先是括號內的是一個整體,作用是取出基名,然后在外面加上[^]達到取反,從而取出路徑,但是沒有結果。
原因是[^]取反的是指定范圍外的單個字符,然而括號括起來的是一個整體,不是一個字符,所以就會出現語法錯誤,同時也知道了中括號中不能套小括號。
原創文章,作者:何必呢,如若轉載,請注明出處:http://www.www58058.com/83544