KAIHATSUGIKEN GROUP

PERL PROGRAMMING LANGUAGE



******************************************************************************************
11 正規表現
*************************
正規表現とはパターンを書くときの表記法のことをいいます。
例えば

正規表現	マッチする文字列
suzuki		"suzuki" 
suzuki*n	"suzukn""suzukiin""suzukiiin""suzukiiiin"
suzu(ki)*	"suzu""suzuuki""suzukiki""suzukikiki""suzukikikiki"
suzu(ki)+	"suzuki""suzukiki""suzukikiki""suzukikikiki"

となります。

suzuki*n はsuzukの後の iが何回か続いてその次にnがあるような文字列とマッチします。
結局 * は何回か続いてと言う意味があります。

suzu(ki)*は()の中の部分を繰り返して・・・と言う意味です。
だから 
suzu suzuki suzukiki suzukikiki とかになります。

+も繰り返しのメタ文字です。
*とか+とかをメタ文字と言います。

+は 一回以上の繰り返しを意味します。
suzuki suzukiki suzukikiki とかね・・・

aの次にbが何個かある
と言う場合に
ab*
と書くと
* は0回以上だからbが無くてもマッチしてしまいます。
a だけでもマッチすることになります。
そういうときは 
ab+  
とすると 
ab abb abbb abbbb などがマッチします。

次に または〜
と言うときに使うのが | です。
ms-dosのときにパイプとかいっていたものと同じですけど
意味が全然違います。

suzuki|satou
だと suzuki又はsatouでマッチします。

(suzuki|satou)(haruna|katano) にすると

suzuki又はsatouの次にharuna又はkatanoが続くような文字列とマッチします。
suzuki haruna   suzuki katano  satou haruna   satou katano
と言う4通りの組み合わせがあります。
()をとってしまうと 
suzuki|satou|haruna|katano にしてしまうと
suzuki又はsatou又はharuna又はkatanoという意味になってしまいます。

これらを組み合わせると 複雑な組み合わせが出来ます。
例えば 
(suzuki|satou)*
にすると
suzuki又はsatouが0回以上繰り返すという意味になります。
0回なら ""とマッチします。
1回なら "suzuki"  "satou"
2回なら "suzukisuzuki" "satousatou" "suzukisatou" "satousuzuki" 
の4通りになります。
********************************