• ベストアンサー

秀丸での正規表現:複雑な条件を指定する場合

秀丸エディタの強調表示設定を正規表現を使用して使用しています。 [a-zA-Z][a-zA-Z0-9_]+\s+[a-zA-Z][a-zA-Z0-9_]+ という正規表現でマッチさせたいのですが、else if というケースでもヒットすると思います。これを例外としてマッチさせたくない場合、どういった記述になるのかが思いつきません。直接的な答えでなくてもいいので、何か解法のヒントなどありましたらご指南いただけませんでしょうか。 よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

その表現にマッチするパターン(なにかのデータのようですが)と else if が一緒に入っているファイル、というのが想像しにくいのですが。 ○そのパターンより、優先順位の高いものとしてelse if を登録する。 例えば、 そのパターンを強調1 に、 else ,if を 強調2 に ○そのパターンの強調を止めて、まわりを強調する。結果、そのパターンの部分が目立つ というあたりはどうでしょうか。

mekaraurokox
質問者

お礼

コメント有難うございます。補足入力を書いたのですが、とても長くなってしまいましたので改めて下記ページに質問を起こさせて頂きました。もしお手隙でしたらお付き合いいただけますととても助かります。 http://okwave.jp/qa/q8758758.html どうぞよろしくお願いいたします

mekaraurokox
質問者

補足

補足入力とお礼が逆になってしまいました。 kmeeさんも他方のアドバイザの方も一つの正規表現にとらわれること無く、という趣旨のアドバイスを頂きまして、よい落とし所を見つけることが出来ました。 アドバイス有り難うございます!おかげで助かりました。

関連するQ&A

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • 秀丸の正規表現はどの流派に属しているのですか?

    秀丸エディタ64 (バージョン8.20)を使用しています。 秀丸の正規表現は、どういった流派(?)の流れを汲んでいるのでしょうか?よく、○○互換の正規表現という言葉がありますよね。Perl互換、.NET互換など、、、Java、C、そのほかの言語/プラットフォームで秀丸の正規表現に最も近いのは何でしょうか、教えてください。

  • 秀丸での正規表現:複雑な条件を指定する場合 続き

    この質問は、 http://okwave.jp/qa/q8757880.html の続きです。 具体的な事を全然書いてませんでした。すみません。 Verilog-HDLというハードウェア記述言語での話です。 上記であげたパターンは、サブモジュールのインスタンス記述 (プログラムで言うサブルーチン呼び出しのようなもの)です。 サブモジュールのインスタンス記述を強調したいと思っていますが、それ以外にも always @(posedge clk)begin  if(xxx)begin   ...  end  else if(yyy)begin //←ここで誤検出   ...  end end というサブモジュールでない記述で誤マッチしてしまうのです。 話それてしまいますが always @(posedge clk)begin  if(xxx)begin   ...  end  else begin   if(yyy)begin    ...   end  end end とかけばよい、という手もあるのですが、他者のコードも受け入れる関係上、その手も難しいのが実情です。 話が前後してしまいましたがサブモジュールインスタンス記述は、 sub_mod_name instance_name ( .... のようになっており、1語目、2語目ともに任意の文字列となっています。 else ifともに言語上の予約語であり、これはインスタンス記述にはなり得ません。 『これにマッチする正規表現」かつ『else if(』にはマッチしないというのは、そもそも『ひとつの正規表現』では表せないのかと悩んでおります。 長くなりすみません。 なにか抜けている点などありましたらご指摘頂けると助かります。

  • 正規表現の仕様について

    "abcdefg"という文字列に対して、/a(bc|bcd)/ という正規表現で検索すると 秀丸エディタの正規表現検索では、"abcd"がマッチし、 スクリプト言語のrubyでは"abc"がマッチします。 これは使用している正規表現ライブラリで演算子'|'の評価の仕方が異なるのだと思うのですが、統一された仕様のようなものは存在しないのでしょうか? 他の正規表現ライブラリ間でもこのような細かな動作の違いというのは存在するのでしょうか?

  • 秀丸エディタで正規表現とマクロを詳しく知りたい

    秀丸エディタをインストールして使い始めたのですが正規表現とマクロを詳しく知りたいのですが解説しているサイトをご存知でしたら教えてください。秀丸エディタに付属のヘルプは一通り目を通しましたが正規表現とマクロがどこに書いているのが分りませんでした。もう一度ヘルプをじっくり見るつもりです。amazonに秀丸エディタの市販の解説本は色々あったのですが どれを買ったらいいか決められませんでした。秀まるおサイト販売の白黒の公式マニュアルはどうでしょうか? また、まだ送金はしていないのですが使用制限・試用期間があるのでしょうか?しばらくすると送金してください等のポップアップが出るのでしょうか?もちろんこのソフトの凄さは分かっているのでちゃんと作者に送金して使うつもりです。

  • (秀丸)正規表現で、""をマッチさせるには?

    お世話になります。 以下2行に、それぞれマッチさせて、 末尾の""(ダブルコーティション)を外して置換えしたいです。 1-234,漢字,ABC,123円,"789" 1-234,漢字,ABC,"1,234円","789" 秀丸の正規表現 検索  ^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),"((.?)*)"$ 置換  \1,\2,\3,\4,\5 で試したところ、 1-234,漢字,ABC,123円,"789" では、マッチして、 1-234,漢字,ABC,123円,789 と置換されて結果OKでした。 しかし、 1-234,漢字,ABC,"1,234円","789" の方ではマッチしませんでした。 そこで質問させていただきますが、 1-234,漢字,ABC,"1,234円","789" でマッチするようにする為には、 上記しました秀丸の正規表現(検索)を、 どのように変更すればよろしかったでしょうか? 以上になります。 宜しくお願いいたします。

  • 正規表現

    正規表現の使い方を教えて下さい。 下記のソースでは、oPerl5Util.matchメソッドから戻って来ません。 正規表現文字列が悪いのか それともメソッドの呼び方の手順などが悪いのか 指摘して下さい。 import org.apache.oro.text.perl.Perl5Util; public class clsTestMain {  public clsTestMain() {}  public static void main(String[] args) {   clsTestMain clsTestMain1 = new clsTestMain();   Perl5Util oPerl5Util = new Perl5Util();   String sPattern = "/[0-9a-zA-Z_!#$%&'*+-/=?^`{|}~]+(.[0-9a-zA-Z_!#$%&'*+-/=?^`{|}~]+)*@[0-9a-zA-Z-]+(.[0-9a-zA-Z-]+)*/";   String sTaget = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890@.jp";     try {    boolean bResult = oPerl5Util.match(sPattern,sTaget); // ここで処理が止まる    System.out.println(bResult); // ここにも来ない   } catch (Exception oException) {    oException.printStackTrace(); // ここにも来ない   }  } }

    • ベストアンサー
    • Java
  • メールアドレスの正規表現

    メールアドレスの正規表現 正規表現の勉強をしています。下記のURLのメールアドレスの正規表現の一部が理解できません。 http://hodade.adam.ne.jp/seiki/page.php?s_mail ^[a-zA-Z0-9!$&*.=^`|~#%'+\/?_{}-]+@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ この中の「[a-zA-Z]{2,4}$」の部分がわかりません。 行末が英文字2以上4以下というのは何を表しているのでしょうか? なぜ2以上4以下になるかが理解できません・・・ 宜しくお願いします!!

  • 秀丸の正規表現をPHPで実行したら

    POST /xxxxxx/xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/444444444444444 HTTP/1.1 GET /xxxxxx/xxxxxx/44444444444444/ HTTP/1.1 GET /xxxxxx/ HTTP/1.0 GET /xxxxxx/P707 HTTP/1.1 GET /xxxxxx/P707_0123 HTTP/1.1 GET /xxxxxx/xxxxxx/?xxxxxx=444444444444444&xxxxxx= HTTP/1.1 GET /xxxxxx/xxxxxx/xxxxxx/444444444444444/?xxxxxx=123456789 HTTP/1.1 GET /xxxxxx/xxxxxx/444444444444444/?xxxxxx=ABC_123_3&xxxxxx=ABC_123_3&xxxxxx=123456789 HTTP/1.1 これらは、とあるサーバーのログなのですが、 上記の内容を、正規表現によって以下のように置換を行っています。 POST /xxxxxx/xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/ HTTP/1.0 GET /xxxxxx/ HTTP/1.1 GET /xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/ HTTP/1.1 これらの内容を秀丸(jre32互換)で行っていたのですが、 PHP(perl互換)で実装をしょうと、正規表現を用いて、行ってみたところエラーが出てしまいました。 検索 ([GET|POST]) /([a-zA-Z]+[0-9]?/)?([a-zA-Z]+[0-9]?/)?([a-zA-Z]+[0-9]?/)?([a-zA-Z]+[0-9]?/)?[^\s]*\s 置換 \1 /\2\3\4\5 (\5のあとに半角スペースあり) ひとくちに正規表現といっても、jre32互換かperl互換かで挙動が違うのだと思いますが、 どこをどのように直したら良いのか、よくわかりませんので 教えて頂けないでしょうか?(この正規表現でなくても同じ結果が得られるなら、それでも良いので・・・) また今回、2回正規表現をしても良いので POST /xxxxxx/xxxxxx/xxxxxx/ HTTP/1.1 GET /xxxxxx/xxxxxx/ HTTP/1.1 ↓ /xxxxxx/xxxxxx/xxxxxx/ /xxxxxx/xxxxxx/ といった具合にもしたいのです。(1回でできれば、一番いいのですが・・・・)

    • ベストアンサー
    • PHP
  • 正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。

    正規表現で@を使う場合は\@とするべきか@とするべきか悩んでいます。 両方とも構文エラーが起きないのでその時点で?ですが .は\.としないと正規表現ではドット文字を認識しないのはわかりますが、正規表現の@はどうすればよいのでしょうか? Perl自体@も配列なので\@つけた方が・・・ よろしくお願いいたします。 $x = "test@example.com"; if ( $x =~ /[^a-zA-Z0-9\.\-\_@]/) if ( $x =~ /[^a-zA-Z0-9\.\-\_\@]/)

    • ベストアンサー
    • Perl