2010年9月17日金曜日

正規表現の予習(つづき)


はる~か昔に詳説 正規表現(初版)を購入したのです(←無謀!)
なんとか一読したものの、あまりの難しさに全く頭に入っていませんです。。。orz

で、今回を機に再度、勉強のやり直し。
再度なのか再々度なのか再々々度なのか忘れたww

サルにもわかる正規表現入門
からやり直しましょ^^

初心者にとって正規表現でややこしいのが^(キャロット)。
正規表現で行頭を表すのですが、 [ ] で括られた中で使用されると除外の意味になってしまうんですね。
で、サルにもわかる正規表現入門には\d{1,2}のように{ }を使った例が出てきません。

そんなわけで探したら
正規表現 - マンガで分かる JavaScriptプログラミング講座
に載っていた。マンガだと分かりやすいのぉ~。

でkanemuさんの
また、コンマ区切りと小数点、時間を表しているコロンがあった場合もマッチさせたくない。
(?<=[^\d\.,:])(\d{1,2})(?=[^\d\.,:])

この文章にはないけれど、行頭もしくは行末に数字が来るかもしれない。
(?<=^|[^\d\.,:])(\d{1,2})(?=[^\d\.,:]|$)
を読み解いています。

[^\d\.,:]の\dの後にくる\が何かなぁ~?と考えましたら、価格を表す¥記号だったんですね。メタ文字なだけにちと悩みました(^^;

^|[^\d\.,:]を翻訳しますと「行頭あるか、もしくは半角数字、円記号、コンマ、小数点、コロン以外の文字」になります。

サルでもkanemuさんchalcedonyさんを何度も読めば、理解できた気分になれてとても幸せになれます^^


続いて寺で正規表現で検索しましたら
CS1は正規表現が使えないのでムリですね。
CS2以降だったら、(?<![\.,])\b\d{2}\b(?![\.,])でイケる?

なんてのがありまして、\bは何かなぁ~?などと調べたら
“単語”の先頭、あるいは末尾にマッチします。言い換えれば、“語の区切り”とマッチするということです。たとえば \bball\bは、前後に空白のある ball にはマッチしますが、baseballには マッチしません。

秀丸で検証したところ\bはやはり行頭、行末にはマッチしませんでした。

気になるのは(?<=[^\.,:])と(?<![\.,:])

同じ意味のような、違うような。。。

0 件のコメント: