VZユーザーのための,VWXによる正規表現利用のてびき
初出:nifty:FGALDC/MES/13/09142〜 (2002/06/18〜2002/07/21)
それでは,実習です。(^^)
ある文書があります。わたしの職場で発注している業務システムの仕様書の形式なのですが,章・節・項を階層化した数字で表わしています。
1 第一章の標題 ・・・本文・・・ 1.1 第一章第一節の標題 ・・・本文・・・ 1.2 第一章第二節の標題 ・・・本文・・・ : 3.5.10 第三章第五節第十項の標題 ・・・本文・・・ 3.5.11 第三章第五節第十一項の標題 ・・・本文・・・ 4.10.1 第四章第十節第一項の標題
…と,こんな感じに行頭から数字とピリオドとスペースにタイトルが付いています。このような形式の決まっている行をGREPで抜き出して,目次を簡単に作ることが出来るのです。ひと昔前は,こんな単純な機能を搭載して「アウトラインプロセッサ機能」なんて称するワープロなんかもありましたねぇ。え?今もこんなものなんですか?
まず,このタイトルを解析しましょう。
行頭>(数字)(ピリオド)(数字)(ピリオド)(数字)(全角スペース)(標題)
…という構造です。
これを正規表現で表わすと,
文字種等 | 正規表現 | 解説 |
---|---|---|
数字 | [0-9] | 半角の数字だけで範囲指定できます。 |
ピリオド | \. | メタキャラクタですから'\'を前置します。 |
スペース | ' ' | 全角だけで,実際には引用符は書きません。 |
標題 | .+ | 漢字や全角半角の英数字・記号が混在した文字列です。 何が出現するか予測できない時はとりあえずこう書きます。 |
行末 | $ | 標題は本文につながらないので行末まで続きます。 |
…と分解でき,章・節・項で
^[0-9]+〔\.[0-9]+〔\.[0-9]+〕〕 .+$
…という構造になっていることがわかります。
〔〕内はあったりなかったりする部分です。この部分をいきなり入れて,
^[0-9]+\.[0-9]+\.[0-9]+ .+$
…なんてことをやるとどうなるかは想像に難くないところですね。もちろん,項の標題行しか出力されません。
《出力結果》
3.5.10 第三章第五節第十項の標題
3.5.11 第三章第五節第十一項の標題
4.10.1 第四章第十節第一項の標題
さて,それではどのように指定したらよいでしょう。