正規表現で、複数行マッチさせるにはNo.16114
かとちん さん 03/12/11 19:06
 
お世話になります。かとちんと申します。
ある範囲の開始キーワードと終了キーワードは分かっていて
その範囲内には任意の文字があるエリアを置換する方法を模索しています。

たとえば、#IF 〜 #ENDIF という領域の場合、

#IF[\x01-\xFF]*#ENDIF

を指定したのですが、1行内に無いとマッチしませんでした。
それではと、

#IF[\x01-\xFF|\n]*#ENDIF

というようにしたのですが、1つだけ改行を含むものにしかマッチしませんでした。

正規表現でなくても構わないのですが、良い方法がありましたら
お知恵をお貸しください。
よろしくお願いします。

[ ]
RE:16114 正規表現で、複数行マッチさせるNo.16118
秀まるお2 さん 03/12/11 19:49
 
 任意の改行を含んだ文字列にマッチさせることは、出来ません。こればっかり
は仕様です。

 しいて、あいまい検索のオプションで、「改行を無視する」っていうのはあり
ますが、それでも改行は8個以内という制限があります。

> 正規表現でなくても構わないのですが、良い方法がありましたら
> お知恵をお貸しください。

 マクロで、#ifを検索して、そこでbeginselして、#endifを検索して、そこま
でをdeleteしてinsertするみたいな処理を作る手はあると思います。

[ ]
RE:16118 正規表現で、複数行マッチさせるNo.16130
かとちん さん 03/12/12 13:07
 
お返事ありがとうございます。

>> 正規表現でなくても構わないのですが、良い方法がありましたら
>> お知恵をお貸しください。
>
> マクロで、#ifを検索して、そこでbeginselして、#endifを検索して、そこま
>でをdeleteしてinsertするみたいな処理を作る手はあると思います。
マクロ作成の方法もあったんですね。
あれからちょっと苦肉の策を使ってなんとか解決できました。

その手順を示します。

1.行マークと行マーク上、行マーク下の
  キー割り当てをあらかじめ行っておく。

2.記録開始。
3.検索で「#IF」を入力し実行。そこで行マーク
4.さらに検索で「#ENDIF」を入力し実行。そこでも行マーク
5.行マーク上で、#IFに移動。SHIFT+↓で1行分を選択状態にしておく。
6.行マーク下を実行。すると#ENDIFの直前までが選択状態に。
7.SHIFT+↓で#ENDIFの行まで選択した上で、Delete.
8.置換する文字列を入力。
9.記録終了。

[ ]