正規表現 早見表

 

 

http://www.mnet.ne.jp/~nakama/(お世話になっております)

 

なお、grepの検索対象文字列、sedの検索対象文字列、viの検索対象文字列には正規表現が使える。他にもいっぱいあると思う。

 

正規表現で使用する特殊文字

 

.  ^  $  [  ]  *  +  ?  |  (  )

 

正規表現ではこれらの文字をメタ文字と呼ぶ。

しかし、これらメタ文字を検索対象の文字として扱いたい場合は、メタ文字の前に\をつける。

 

注)!!!

実はgrepでは以下の7文字しかメタ文字として扱えない

\ .  ^  $  [  ]  * 

つまり、これらはgrepでは使えんのである(あー、悲しい〜〜!)

              +  ?  |  (  )

 

メタ文字解説

 

1)なんでもいい一文字 . 

.はとにかく何でもいいから一文字をあらわす。

I am a m.c

I am a mac            I am a mic             I am a moc

のどれにでも、(もちろんこれ以外にも)なり得る。

 

2)行の先頭と最後 ^  $

行の先頭や最後にのみ存在する文字列を検索する場合はこれ。

(java.txt)

Hello Java World!

I like ! Java

Java is wonderful

 

で、^Javaを検索すると、引っかかるのはJava is wonderfulのみである。

$ grep ‘^Java’ java.txt

Java is wonderful!

 

また、! $とすれば引っかかるのは、

$ grep '!$' java.txt

Hello Java World!

 

なお、特殊な場合として、行頭にある^、行末にある$^^$$として検索する。

 

3)同じ文字の繰り返し *  +  ?

*:直前の文字を0〜∞回繰り返す(なくても、何個でもいいから直前の文字を繰り返す)

+:直前の文字を1〜∞回繰り返す(最低1回は直前の文字を繰り返す)

?:直前の文字を01回繰り返す(ないか、1回直前の文字を繰り返す)

 

(文字列の長さとメタ文字の関係)

 

4)何でもいい文字の連続 .*

(応用)

Java is fun and wonderful

Java.*fで検索すると、引っかかるのは「Java is f」か「Java is fun and wonderf」のどちらか?

答えは、「Java is fun and wonderf」であり、.*は可能な限り合致するまでつながる。

 

5)いずれかの文字列 |

|で区切られたいずれかの文字列が存在したときに正規表現に合致したことになる。

 

 

6)指定した文字のどれか [  ]

[a-f]などとして使うと、abcdefのいづれかにマッチする。

[^a-f]などとして使うと、abcdefのいづれか以外にマッチする。

 

7)文字列のグループ化(  )

(Ja)+vaなどとして使うと、JavaJaJavaJaJaJavaなどとマッチする。