◀一般トップへ
  • 4438 正規表現で否定の書き方を教えて下さい。
    • 4439 Re:正規表現で否定の書き方を教えて下さい。
      • 4440 それがだめなんです
        • 4441 Re:それがだめなんです
          • 4443 できました!有難うございます。
            • 4444 Re:できました!有難うございます。
              • 4445 ご了承いただき、有難うございます。
  • [4438] 正規表現で否定の書き方を教えて下さい。 渡辺真 2005年05月02日 05:48

    以前この掲示板で、下記を教えていただきました。

    (?!パターン) ゼロ幅の否定的な先読み表現

    これを使って、

    1.指定した文字で始まらない行
    例えば、行頭が 変更 ではない行は、
    ^(?!変更).*$

    2.指定した文字を含まない行
    例えば、 変更 を含まない行は、
    ^((?!変更).)*$

    で摘出できることを知りました。
    そこで、

    3.指定した文字で終わらない行
    例えば、行末が 変更 ではない行


    は、どう書けばよいか、お教え下さい。
    • [4439] Re:正規表現で否定の書き方を教えて下さい。 しみづ 2005年05月02日 19:14


      >3.指定した文字で終わらない行
      >例えば、行末が 変更 ではない行
      >は、どう書けばよいか、お教え下さい。

       単純に考えれば
      ^.*(?!変更)$
      という気がしますが、だめでしょうか。
       あるいは
      ^.*[^変][^更]$
      でいいような。
      • [4440] それがだめなんです 渡辺真 2005年05月02日 21:24

        ▼ しみづさん
        >
        >  単純に考えれば
        > ^.*(?!変更)$
        > という気がしますが、だめでしょうか。
        >  あるいは
        > ^.*[^変][^更]$
        > でいいような。

        回答有難うございます。

        私もそれでやってみたのですが、ダメなのです。
        .*
        の部分が、強力な「何でも有り」なので、「変更」も当てしまって、否定にならないのです。
        • [4441] Re:それがだめなんです (全略) 2005年05月03日 00:02

          ▼ 渡辺真さん
          > 私もそれでやってみたのですが、ダメなのです。
          > .*
          > の部分が、強力な「何でも有り」なので、「変更」も当てしまって、否定にならないのです。
          先読み否定を使う場合
          ^.*(?!変更)..$
          と後ろに同幅で有幅の表現を置いてやらないといけませんね

          それでもダメなら、おそらく理由は改行コードのせいではないですかね?
          CRLFの改行の場合
          ^.*(?!変更)..\r\n
          としてやればうまくいくみたいです
          同じくしみづさんの正規表現も
          ^.*[^変][^更]\r\n
          とすればうまくいきましたよ
          # なんか内部の「$」の変換処理がうまく動いてないのかな?
          • [4443] できました!有難うございます。 渡辺真 2005年05月03日 16:08

            しみづさん、(全略)さん、感謝します。

            後日の参考のため、私のホームページにも、掲示させていただきました。

            ご了承下さい。

            m(__)m
            • [4444] Re:できました!有難うございます。 (全略) 2005年05月06日 11:27

              ▼ 渡辺真さん
              > しみづさん、(全略)さん、感謝します。
              >
              > 後日の参考のため、私のホームページにも、掲示させていただきました。
              >
              > ご了承下さい。
              >
              > m(__)m
              あー、、、そのまま引用されてしまってるようですが、ツッコミを受ける前に一応言っておきますとその正規表現は不完全です
              どちらも最低2文字のマッチを必要とするため「変更」で終わらない全ての行にマッチはしません
              チョットややこしくなる上必要なさそうなので黙ってましたが、とりあえず^^;

              もし引用されるようでしたら m/.*(?<!変更)$/ が(普通のperl互換の)正規表現では一般的だとでも付け加えておいて下さい
              あと「同幅で有幅」だとかは造語です^^; なんと表現したらよいのかわからず、、、
              意味を汲み取ってくれたようで幸いですが
              • [4445] ご了承いただき、有難うございます。 渡辺真 2005年05月07日 14:18

                記述を修正しておきました。

                重ね重ね、感謝いたします。

                m(__)m