DevPartner 技術情報(FAQ)


正規表現ルールのサンプル集

この他にも、「DevPartnerコードレビュールールマネージャ」のヘルプ中の項目[トリガの設定]-[正規表現を使用して新しいルールを作成する]にいくつかのサンプルともに説明がございますので参照ください。


(A) インターフェース名は必ず "I" で始まる

  • トリガー
    タイプコード
    言語C#,VB.NET
    Trueでないときに適用False
    スコープNamespace
  • 正規表現
    (?-i)(interface|Interface)\s[^I]
    
  • 正規表現の説明
    (?-i)大文字小文字を区別します
    (interface|Interface)"interface"か"Interface"にマッチします
    ¥s"Interface"の後ろに空白(スペース)にマッチします
    [^i]"i"以外の文字にマッチします
  • 検出されないパターン
    interface ITest
    {
    	void dummy();
    }
    
  • 検出されるパターン
    interface Test
    {
    	void dummy();
    }
    

(B) ひとつクラスにはpublicメソッドは20個まで

  • トリガー
    タイプコード
    言語C#,VB.NET
    Trueでないときに適用False
    スコープClass
  • 正規表現
    (?is)public[^\(]*
    
  • 正規表現の説明
    ¥(左括弧を正規表現ではなく文字として扱います
    [^¥(]*左括弧以外の任意の文字にマッチします
    (?s)複数行にまたがるコードを一行として扱います
  • 「20個まで」の指定については、ルールマネージャの[式ビルダ]を使用します。
1.png
  • 検出されないパターン
    class Class1
    {
    public void Test01() {}
    ・
    ・
    public void Test19() {}
    }
    
  • 検出されるパターン
    class Class1
    {
    public void Test01() {}
    ・
    ・
    public void Test20() {}
    }
    

(C) 一行に複数ステートメントを配置しない

※このルールは製品に含まれているルール番号1620です。

  • トリガー
    タイプコード
    言語C#
    Trueでないときに適用False
    スコープMethod
  • 正規表現
    (?<!for.*);.*;
    
  • 正規表現の説明
    (?<!部分式)否定の後読みです。部分式が左側にマッチしないときに成功します。
    (?<!for.*);左側にforがない;にマッチします。
    .*;任意の文字列から;までマッチします。
  • 検出されないパターン
    for(int i = 0; i < 10; i++){
    ...
    }
    
  • 検出されるパターン
    int i = 1; int j = 2;