人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

jgawkでスクリプトを組んでいます。
下記の任意の文章に一致するような正規表現をお願いします。

■文頭━━━━(長さ不定)━━■

(任意の文章数行、空白や空行もあり)

○文末━━━━(長さ不定)━━○

●質問者: Feynman
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:スクリプト 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● aki73ix
●20ポイント

http://akademeia.info/main/lecture1/tokubetu_seikihyougen.htm

URLはダミーです

Windowsのテキストならば

/■━+■¥r¥n*○━+○/

で、改行コードが違うのなら¥r や¥nに置き換えてくださいなくても( /■━+■*○━+○/

で)動作すると思いますが、無いと

”■━■○━○”でもHITしてしまいます

原理的にはこうなんですが、普通は行単位で正規化して参照しますよね?

文単位で参照ってのは一時代入するか、置換して実行し無いと難しいと思うので、どんなScriptを書かれてるのかがちょっと気になります・・・

◎質問者からの返答

>文単位で参照

したことがなかったので、どうすればいいかも含めて質問してみました。


2 ● aki73ix
●20ポイント

http://www.not-enough.org/abe/manual/command/awk.html

UNIX awk

URLはダミーです

>>文単位で参照

>したことがなかったので、どうすればいいかも含めて質問してみました。

やはりそうでしたか

通常AWKはレコードセパレータとフィールドセパレータを指定して、レコード単位で処理します

【標準】

BEGIN{ RS=”¥r” ; FS=””}

ですから

BEGIN{ RS=”¥t” ; FS=””}

等にしてファイルを1つのファイルとして処理します

処理の例です

#レコードセパレータを使っていない適当な文字にする(ここではTAB)

BEGIN{ RS=”¥t” ; FS=””}

{

x=$1;

for(a=b=c=1;a>0&&b>0;)

#レコードに該当文字が無くなるまでループ

{

match(x,”■━+■”);

a=RSTART;

c=RLENGTH;

match(x,”○━+○”);

b=RSTART;

d=substr(x,a+c,b-a-c);

if(b>0&&a>0){

#該当部があるか確認

f=sub(/○━+○/,””,x);

if(b>a){

#該当部があれば処理

printf(”%s”,d);

e=sub(/■━+■/,””,x);

}

}

}

}


3 ● underway
●20ポイント

http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_6.html#SEC38

The GNU Awk User's Guide - 入力ファイルの読み込み

(URLは後ろのほうの「FS」のところのみ関連します)

スクリプトでマッチングされたあと何らかの置換処理を行うような処理をされていると想定してよいでしょうか。(マッチングさせるだけだと、以下はあまりあてはまらないと思います)

自分はこういう場合、元のファイル以外に処理用のテンポラリファイルを作って内容を書き換えてしまいます。

例えば

1)改行や空白、空行に意味がない場合

・1回目の置換で改行や空白をなくしてしまう。

・次に、文末の後に改行を入れる。

そうすると/■━+■*○━+○/

で処理ができるようになります。

2)改行や空白、空行をなくしたくない場合

今回の例だと、文頭、文末の区切り記号を変えてしまうことを考えると思います。

awkはFS変数の値を変えることでフィールド区切り文字を変更することができますので、(たとえば改行以外に)

・文頭の区切り文字は削除する

・文末の区切り文字を例えば「○」のみなど、任意の文章中に出てこない文字に変換する。

・FS変数を上で設定した「○」にしてから処理を行う。

ことで、改行は残したままマッチング処理をすることができます。

正規表現でマッチングしたあと何をされるかをお知らせいただくと、もう少し的確な回答もできるかもしれません。

◎質問者からの返答

aki73ixさん、underwayさん

詳しくありがとうございました。

なんとか処理できそうです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ