ネタ元: まさるさんの 正規表現知らんの? http://blogs.wankuma.com/masaru/archive/2007/10/04/99539.aspx
コメントでは正規表現が使われていないことを意外と見る方々と当然と見る方々の二つに分かれているようでした。
これに関連して考え込んだ事がありました。なぜ「使われない・使えない」以前に「理解されていない」のか。
中御大の仰る「所詮アルファベティカルの国の人の道具さ 」であるかも。
西洋言語には 0個以上の存在とか AND / OR / XOR の区別、一方にしか無いものの合成などの概念が浸透しているが、日本語ではそのあたりがあやふやであるためかも知れません。
「0個以上の繰り返しは .* 、1個以上の繰り返しは .+」という文が体得し難い人がいます。0個以上という言葉が壁になるようですね。
理解を得られない時は、 実例を挙げて「この場合は .* を使い この場合は .+ 使え」と言ってます(駄目な方法だとは解っていますが...orz...理解しないままコピペさせているのと同じだものね)
C言語のPointerでも類似の経験があります。世の解説書のマズイ点に「PointerとAddressは同じもの」「配列とPointerは同じもの」と記されている本があるようです。仕組みを理解していない人は言葉通り信じるので基本概念を間違ってしまうようです。
Addressは物理的な住所でしかないから Address++ は1増加だが、Pointerは型情報を把握しているから Pointer++ の演算が正確に行われるんだよ..と言ってもピンとこないようです。
SQLのOuterJoinでもありました。「一方にしか無いデータの結合」という言葉が壁になるようです。
在るもの同士の結合は実感できるが一方にしかないものをどのように結合するのか理解できないようです。
こちらも入門書の書き方にも問題があると思います。Left outer / Right outerを同列に記載されていますが、実務ではleft outerで使うケースが多いので
Left outerで実例を挙げて解説したほうが初心者は混乱しなくて良いと思うのです。
「0個以上の繰り返し」「存在しないものと存在するものの結合」などは理解している人には当然の用語ですが、理解し難い人には高い壁に思うようです。
この人たちはProgramerに不向きだといってしまえば元も子もなくなるのですが、一度は解説して上げてもいいのかなって...仏心が出たりします。
(教育はだれの責任か..は別問題)
このあたりは言葉や用語では伝えきれない部分があり個々人が実習/実演で体得して貰うしかないのかもしれません。
「習うより慣れろ」とはよくいったものです。
正規表現処理は好きですね。大量処理の時はコストが高いので敬遠しますが、入力Checkや簡単な文のパースなどは便利なことこの上ない
xxコード char(9) なんで定義している文から xxコード, char , 8 を切り出すとき (.*?)\s+(.*?)\(((.|\n)*?)\) で可能なのでGoodだと感じます。
これ以上長くなると、後日、自分で意味不明に陥るのでこの程度で済ませてますが....orz.