- 締切済み
正規表現についてお教え下さい
正規表現についてお教え下さい。 )以外の全ての文字列(改行・Tab・空白等含む)の1回以上の繰返しという記述は正規表現ではどのような記述になるでしょうか? NoEditorで下記のような条件でgrepしようとしたのですがうまくいきません。 [[^[^\)]] \t\n\r\f]+ 具体的には下記のような5行があった場合、以下のような条件で1、2、3行目を抽出できるということを想定しています。 条件:AAA )以外の全ての文字列の1回以上の繰返し \) ※現状の条件の記述はAAA[[^[^\)]] \t\n\r\f]+\) 1行目 AAAあ(aaa) 2行目 AAA あ(aaa) 3行目 AAA あ 4行目 (aaa) 5行目 AAA)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
たいていのエディタ(grepも)は正規表現にまっちする「行」を探し出すので,改行は扱えません. で例示された5つの行から1,2,3行だけを抜き出すのなら, AAA.*) でいいのでは? 少なくともUNIXのgrepコマンドは, )の前に \ は無くて動きましたが.
- Tacosan
- ベストアンサー率23% (3656/15482)
う~ん.... 「正規表現はプログラムによって違う」とか, 「正規表現を使うプログラムはしばしば行指向なので, 改行とは相性がわるい」ということは当然理解されてますよね? 条件からすると, Perl の正規表現 AAA[^)]+\)[[:space:]]*BBB を複数行にわたってマッチさせるようにすればいい感じだけど.... でも, どうなんだろ? こんな出力からマッチさせるということそのものを考え直した方がいいような気がするなぁ. なんで, もっとマッチさせやすい出力にしてくれないんだ.
- Tacosan
- ベストアンサー率23% (3656/15482)
条件がよくわからないんですが, AAA([^)]|$) でよかったりしませんか? [[^[^\)]] \t\n\r\f]+ は, 正規表現として間違ってるような気がする... というか, 何を表現したいのかさっぱりわからん.
補足
ご回答ありがとうございます。 質問の記述が不足していましたので補足します。 下記条件にマッチするようにしたいと考えています。 (1→2→3→4→5の順番です) 1: AAA 2: )以外の文字列の1回以上の繰返し 3: ) 4: 空白、改行等の0回以上の繰返し 5: BBB また、上記条件で実行することで下記の1、6行目のみ抽出されることを想定しています。 1行目 AAAあ(aaa)BBB 2行目 AAA あ(aaa) 3行目 AAA あ 4行目 (aaa) 5行目 AAA) 6行目 AAA あ 7行目 (aaa) 8行目 BBB 9行目 AAA あ 10行目 (aaa) 11行目 CCC Tacosanさんにご教授頂いた記述方法を利用し、 AAA([^)]|$)[ \t\n\r\f]*BBB という条件でgrepしたのですが1件も抽出することができませんでした。