2007年09月19日

正規表現2

 今日も正規表現についてやりました。

 今までは既存のソフトを使って色々正規表現を試していたのですが、それだと時間も掛かるしイマイチはっきりしない部分もあるので、今日自分で学習用のソフトを作ってみました。
 このとき正規表現を扱うクラスとして、ATLの「CRegExp」クラスを使用したのですが、一般的な使い方と少し違う部分もあるので、今度はその扱い方に苦労しました。

 ただ単にマッチするかどうかだけを調べるなら一般的な使い方でいいのですが、マッチした部分を取得しようとすると少し工夫が要るようです。
 例を挙げると、検索文字を [0-9] として、対象文字列を 123 とすると、当然マッチするのですが、マッチした文字が何なのかは解りません。
 そこで、検索文字を {[0-9]} とすると、マッチした文字 "1" が取得できます。

 もう少し複雑にすると、検索文字を {[0-9]+}[a-z]+{[0-9]+} とし、対象文字列を 123test456 とした場合、マッチして取得できる文字列は、"123""456" だけで、 "test" は取得できません。
 要するに、 "{ }" で挟んだ部分にマッチした文字列が取得できる、という訳です。
 この例で "test" も取得したかったら、[a-z]+ 部分も "{ }" で囲まなければいけません。

 ここで何が問題かというと、文字列の先頭や末尾を指定する "^""$" 、量指定子の "{ }" がうまく指定できないのです。
 正確には、 "{ }" の外に書けば機能するのですが、実用化する場合にこの辺がネックになりそうです。

 少し具体的に書けば、^{[0-9]} がOKで {^[0-9]} ではNGになります。
 なので、単純に入力されたものを "{ }" で囲めばいいというものではないみたいです。

 以上のように、もう少し正規表現についてと、ソフトを作る上での正規表現の扱い方を勉強しなければならないみたいです。
 ソースの中だけで、決まった文字列を検索する場合なら今でも使えるとは思いますけど・・・。
ランキングへ  posted by 遠雷 at 00:29 | コメント(0) | パソコン・インターネット

2007年09月18日

正規表現

 今日も大したことはしてないですが、少し正規表現について勉強しました。

 CGIなどを書いていると、正規表現を使うことがよくあるのですが、どうも馴染めません。
 完全に使えるようになれば便利なのは解るのですが、イマイチ使いこなせません。
 記号や文字だけで色んな事を表現し、書いてあることが完全に暗号化してしまっていて、理解するのに苦労します。

 自分でマッチするように書いたつもりでもマッチしなかったり、意図しないところでマッチしたりと中々うまくいきません。
 例などを見ると「なるほどなぁ」と思うのですが、いざ自分で書くとダメです。

 やはりこれも使い込まないとダメなんでしょうねぇ。
ランキングへ  posted by 遠雷 at 00:54 | コメント(0) | パソコン・インターネット