• 締切済み

正規表現でファイルの末尾の特定の文字以外を探し出す。

Devasというフォルダ内の複数のファイルを正規表現の置き換えができるソフトを使って、フォルダ内の複数のファイルの末尾の行の初めの文字が特定の文字(この場合は<)以外のファイルを探しだしたいのですが、 正規表現で\z^[^<]としても出てきません。 秀丸などでファイルを見ると、ファイルの末尾が ----------------------- <br> [EOF] ----------------------- となっているファイルは無視し、<以外の文字のファイル、例えば、 ----------------------- (あいうえお) [EOF] ----------------------- などとなっているファイルを探し出したいのです、 [EOF]の部分がファイルの末尾になるから上の正規表現では出来ないのでしょうか?だとすればどのようにすればよいのでしょうか?

みんなの回答

  • Fushino
  • ベストアンサー率59% (329/550)
回答No.3

最終行が空行(改行のみ)の場合の扱いが不明ですが、 ・空行は無視して直前の行頭の文字が"<"以外ということなら ^[^<\n][^\n]*\n*?\z ・最終行が空行ならば最終行の先頭は"<"以外であると判断するなら ^([^<\n][^\n]*|\n)\n?\z いまひとつ複数行と改行絡みの正規表現は理解できてませんので無理矢理といった感じですが取りあえずご参考までに。

  • cynthia4
  • ベストアンサー率51% (186/358)
回答No.2

少し、sed をかじった程度で Devas の正規表現をちょっと見て http://gimite.net/help/devas-ja/all_regex.html \z^[^<] [EOF] の後に 文字は無いでしょう。 // それでも検索するみたいだが 簡単に [^>]\n\z で良いみたいですが 下記の様な場合を含めて どうするかは、自分で少し考えて下さい。 <br>[EOF]

  • snowize
  • ベストアンサー率27% (68/245)
回答No.1

ちょっとよく分かりませんが、正規表現の文法を勘違いしていらっしゃると思います。そもそも\zというメタ文字は存在しません(\Z = $ の勘違い?)。 そのソフトウェアに明るくないので「行単位のマッチ」を行うのか「ファイル単位のマッチ」を行うのか、2BYTE文字をどう扱っているのか、マッチしなかった場合だけ表示ということが行えるのかとかいろいろ分かりませんので、正規表現の説明とソフトのマニュアルをもう一度確認してみてはいかがでしょうか。

関連するQ&A

  • 複数のテキストの末尾に文字列を挿入

    複数のテキストファイルがあり、その末尾に文字列を挿入したいのです。 つまり、EOFの直前に、全てのテキストファイル(具体的には、PHPなどのファイル)に決められた文字を入れたいのですが、そのようなソフトウェアはありますでしょうか? 色々さがして、正規表現で複数ファイルの置換ができる、というソフトでも試してみたのですが「EOF」を示す「\z」はどうやら認識してくれないらしく…… もし、そのようなソフトや方法などを知っておられましたら、お教えください。 よろしくお願いします。

  • 秀丸 正規表現 \z

    あるフォルダに空のファイルがいくつかあって、それをgrepを使ってファイルの一覧を取得したいのです。 空のファイルは、[EOF]とだけ入っている状態なので、 正規表現の「\z」で抽出出来そうな感じですけど、駄目でした。 マクロを使わないで、正規表現だけで、ファイルの一覧を取得出来るのでしょうか? 秀丸初心者ですが、宜しくお願いします。

  • 秀丸での正規表現

     秀丸エディタVersion 7.11、HMJRE.DLL V1.92 を使用しています。  下記上のような4行のテキストファイルから、数字以外で始まる行を空行に置換しようと思い、検索文字列を「^[^0-9].*」、置換文字列を「」(なし)に設定したのですが、3行目のx だけからなる行は削除されませんでした(下記下のようになりました。このとき、カーソルは変換後の2行目の一番左のx の右側にあります)。 置換前 >11111 > >xxxxx >[EOF] 置換後 >11111 >xxxxx カーソルは左端のx の右側 >[EOF]  11111 とxxxxx の間にもう1行空行を入れると、所望の動作となります。  正規表現の指定が間違っているのでしょうか。

  • (秀丸)正規表現で、特定文字列含む<~>範囲を選択

    お世話になります。 (秀丸の)正規表現について教えてください。 たとえば、テキストファイルに、1行、 ”<abc>文字列1です><abc>文字列2です><abc>文字列3です>(ここで改行)” という文字列が存在しています。 それを対象として、 (秀丸の)正規表現を利用し、 ”<abc>文字列2です>”だけをマッチさせたいのですが、 試しに、(秀丸の)正規表現で、 <abc.*文字列2.*?>  ←(なお、実際の記号は半角(.*?等)で、それぞれ入力しています・・・) で検索実行したところ、 ”<abc>文字列1です><abc>文字列2です>” として、 前の方に、マッチして欲しくない、 ”<abc>文字列1です>” までがマッチしてしまっている状況です。 そこでご質問なのですが、 上記におきまして、(秀丸の)正規表現を利用して、 ”<abc>文字列2です>”だけをマッチさせるには、 どのようにすれば、よろしかったでしょうか? (ちなみに秀丸は、2013年12月10日(火)現在の  最新バージョンVer8.32を利用しています) 以上になります。 宜しくお願いいたします。

  • 正規表現でマッチさせたい文字列の指定方法

    正規表現でマッチさせたい文字列の指定方法について こんにちは。正規表現について教えてください。 秀丸エディタでgrepする時に先頭行に 『ファイル名(行数): 』という文字列が 先頭行に入りますが、これを正規表現を使用して消したいと思っています。 具体的には以下のような表現ですが、どのように指定するのが正しいでしょうか。 いくらかテストしているのですが、なかなかうまくできず困っています。 消したい文字列 test.log-110411-01.bak.text(38): よろしくお願いします

  • PHP 正規表現

    はじめまして^^ 現在、PHPでプログラムを作っています。 そして、文字列の置き換えをする機会があり、 正規表現をつかうことになりました!! 置き換えに使う関数は、mb_ereg_replaceです! ある条件にあった部分の文字列を置き換えしたいと思っています。 そして、いろいろとやっていきましたら、あるひとつの壁にぶつかりました。。 例えば、PHPでは、正規表現の部分を [^文字]とやると、『文』と『字』という文字列以外にマッチという意味になるらしいのですが、 『文字』という文字列以外にマッチ、というふうに、表現したい場合は、 どう表現すればよいのですか? [^(文字)]とか、その他いろいろ、 自分なりに、色々ためしたのですが、うんともすんともいいません、、 どなたか、わかる方教えて下さいm(_ _)m

    • ベストアンサー
    • PHP
  • 正規表現について教えてください

    これから正規表現を勉強しようとする者です。 次の2点について教えて頂きたいのですが、よろしくお願いします。 1.次のような置換をする正規表現は? 例えば、 ■■■ あいうえお かきくけこ ■■↓ ○○○ あいうえお かきくけこ ○○○ というテキストがある場合、○○○~○○○までの「あいうえお」 のみを「アイウエオ」に置換するには、どのような正規表現にすれば 良いのでしょうか? 2.秀丸エディタでは、フォルダ内の全ファイルを一括で置換する 事はできるのでしょうか? 以上2点です。 よろしくお願いします。

  • 正規表現で5文字切抜き

    正規表現で5文字切抜き 正規表現について悩んでいます。秀丸エディタで正規表現を使いたいと思っています。 各行に任意の文字列(スペース、ハイフン、カンマ、アンダーバー、半角全角英数等含む)があります。 先頭行から5文字を残して残りは削除したいと思います。 5文字以下はそのまま残したいと思います。 例) aaaaabb⇒aaaaa ab cdef⇒ab cd a ⇒ a aa⇒aa 「^.{1,5}」とやると、先頭から5文字選択できるのはわかります。 「^.{1,5}(?=.+)」とやっても選択できるのはわかります。 ただし、6文字以上は削除とした場合、どのように正規表現を組み立てればよいでしょうか?

  • テキストエディタでの置換(正規表現チェック済)と同様のことを

    テキストエディタでの置換(正規表現チェック済)と同様のことを エクセルのマクロでもしたい。 画像を添付しましたが、秀丸で置換を選択し、 検索文字列と置換文字列を入れて、正規表現チェックのチェックボックスを 選択した状態で実行するのと同様のことをエクセルのマクロで行いたいです。 正規表現混みだととても難しいです。 やりたいことはマクロで、フォルダ内のテキストファイルを置換をかけていきたいです。(テキストファイルは複数ある状態)そのテキストファイルを更新できればいいです。(別テキストで出力されてもいいです。) どなたか詳しい方、教えていただけませんでしょうか? よろしくお願いいたします。 --- 検索エディタ【秀丸】【置換】 検索【.*item1=(.*) item2=(.*) .*】 置換【\1\t\2】 正規表現チェック

  • PHPにおける正規表現について

    PHPにおける正規表現について ご教授ください。 いわゆる、対象の文字列が複数行にわたっていた場合のことです。 $data = <<< EOF ABCDE FGH EOF; $hoge = preg_match("/EF/" ,$data,$match); と上記のようなコードがあった場合 対象の文字列群から【EF】という文字列を検索したい場合、どのように記述したら 【E(間に改行)F】の文字列と一致させる事ができるでしょうか? 仮に正規表現の修飾子の【s】や【m】を用いても上記の例の場合 一致させることができないと思います。 やはり、対象の文字列群 $data の改行文字をいったん削除したものから検索 するのがベターでしょうか? 正規表現に造詣の深い方よろしくご教授ください。

    • ベストアンサー
    • PHP