またも秀丸エディタの正規表現でしばしハマる・・・(^^;

いやあ、また秀丸エディタの正規表現ではまってしまった(^^;

マッチした文字を抜き出すところで毎回ひっかかるな(^^;
まあ、秀丸であんまりややこしい正規表現使うことが無いので、たまに一部文字列の置換とかをする時にうろ覚えでやっちゃってハマっちゃうんだよな(^^;

何か、以前も一回、このブログでも書いた気がするが、例えば下のような例。

(例)何かの拍子に壊れてしまった CSV ファイルを修復する。

本来なら、'ほげほげ' という具合に文字列が入った項目のあとに、5つ空の項目が続いてから(シングルクォーテーションで括られている)、数値(シングルクォーテーションで括られていない)が来る・・・という構造なのに、間の空の項目が 4つになってしまっている行があるので修復。

Perl で書けば、
$str =~ s/'([^\s]+?)', '', '', '', '', ([0-9]+?),/'$1', '', '', '', '', '', $2,/s
って感じか。(いや、こんなにバカみたいにシングルクォーテーションの部分を書かなくてもいいんだけど、今回はこんな感じで(^^;)

これを、秀丸の正規表現で書くと、()で囲ってマッチングした文字列を抜き出す機能が秀丸にはないので、代わりに \f という区切り文字を使うことになる。
こんな感じ↓

'\f[^\s]+?\f', '', '', '', '', \f[0-9]+?\f,

で、ここで、ついつい Perl の(つーか、POSIX拡張の?)正規表現のつもりで、\f[^\s]+?\f が一つ目の項目、\f[0-9]+?\f が二つ目の項目だと誤解しちゃう。

'あいうえお', '', '', '', '', 1234,

というデータだと(ちなみに、$1, $2...は、秀丸だと \1, \2...と表現)、

\1 あいうえお
\2 1234

と思っちゃうんだけど、これが大間違い。
\f は区切り文字なので(開始のカッコに閉じカッコってわけじゃないので)、

\1 あいうえお
\2 ', '', '', '', '',
\3 1234

となるんだよなあ。

ちなみに、\f で囲まれている範囲しか対象にはならないので、

\1 '
\2 あいうえお
\3 ', '', '', '', '',
\4 1234
\5 ,

というわけではない。(Perl で、/'([^\s]+?)(', '', '', '', '', )([0-9]+?),/ こう書いてるのと一緒)

つーことで、本来 \3 をセットするべきところに、一生懸命 \2 をセットして、何やねん、このわけのわからん置換結果は・・・と悩んどったわ(^^;

てか、秀丸エディタには大変お世話になってるんだけど(ちゃんと PC 毎にライセンスも取得)、この HMJRE.DLL の正規表現には違和感あるわ。

なんで、Perl 拡張正規表現互換にしないんだろう。
Ruby や、Python は Perl 拡張互換だし、Adobe の ActionScript もそうだ。Java もだよね?(Perl は正規表現最強言語だからな(笑))
秀丸で () や $1,$2... みたいな表現を使わない(使えない?)理由って何かあるのかね・・・???

トラックバック(0)

このブログ記事を参照しているブログ一覧: またも秀丸エディタの正規表現でしばしハマる・・・(^^;

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/2350

コメントする

このブログ記事について

このページは、shinodaが2013年1月 3日 20:41に書いたブログ記事です。

ひとつ前のブログ記事は「「グリル音戸大橋」で1,000円のランチを食べてみたけど」です。

次のブログ記事は「「唐々亭 激辛つけ麺」を買ってみた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら