0

クラスのプロパティを一致させようとしています。クラスの例:

public static string ComingSoonPage
{
   get { return "/blog-coming-soon.aspx"; }
}

public static string EncodeBase64(string dataToEncode)
{
   byte[] bytes = System.Text.ASCIIEncoding.UTF8.GetBytes(dataToEncode);
   string returnValue = System.Convert.ToBase64String(bytes);
   return returnValue;
}

この種の正規表現を使用しています:

(?:public|private|protected)([\s\w]*)\s+(\w+)[^(]

プロパティだけでなく、間違っているメソッドにも一致します。だから私は(を含む文を一致から削除したい。だからそれはを含む)メソッドではなくすべてを選択する。どうすればそれを達成できるか。

4

3 に答える 3

2

代わりに"{"と を一致させてみてください"get {"

(public|private|protected|internal)[\s\w]*\s+(\w+)\s*\{\s*get\s*\{

アップデート

プロパティの名前のみに一致

(?<=(public|private|protected|internal)[\s\w]*\s+)\w+(?=\s*\{\s*get\s*\{)

一般的なパターンを使用する

(?<=prefix)find(?=suffix)

編集

プロパティには修飾子 (public、private など) がまったくない場合があり、型に余分な文字が含まれる場合があります (たとえば、 array のint[,]場合。したがって、プロパティ名 (および名前自体) に続く構文要素のみをテストすることをお勧めします)。また、プロパティはセッターのみで構成され、abstract:にすることもできますabstract int[,] Matrix { set; }。次のようにプロパティ名を取得することをお勧めします:

\w+(?=\s*\{\s*(get|set)\b)

where は\b、単語の先頭または (この場合) 単語の末尾に一致します。

于 2012-08-12T16:34:45.473 に答える
1

これはあなたが探しているものかもしれません。これは完璧に機能します! しかし、私はいくつかの御馳走に値します:)...

Regex r=new Regex(@"(public|private).*?(?=(public|private|$))",RegexOptions.Singleline);
Regex nr=new Regex(@"\(.*?\)\s+\{",RegexOptions.Singleline);
foreach(Match m in r.Matches(yourCodeFile))//extracts all methods and properties
{
if(!nr.IsMatch(m.Value))//shoots down methods
m.Value;//properties only
}
于 2012-08-12T18:49:18.350 に答える
1

この回答によると、次を使用してみてください。

Properties:typeおよびname: _

(?:public\s|private\s|protected\s|internal\s)\s*(?:readonly|static\s+)?(?<type>\w+)\s+(?<name>\w+)[\s\r\n]*{

Fields:typeおよびname: _

(?:public\s|private\s|protected\s)\s*(?:readonly|static\s+)?(?<type>\w+)\s+(?<name>\w+);

for Methods:methodNameおよび: parameterType_parameter

(?:public\s|private\s|protected\s|internal\s)?[\s\w]*\s+(?<methodName>\w+)\s*\(\s*(?:(ref\s|/in\s|out\s)?\s*(?<parameterType>\w+)\s+(?<parameter>\w+)\s*,?\s*)+\)

C# コード分析については、 IronyまたはThe Roslyn Projectを試してください。このサンプルを参照してください。

于 2012-08-13T05:07:53.810 に答える