0

私は正規表現に不慣れで、これらの2行を一致させたいと思っています:

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"

これまでのところ、私はこれを持っています:

(\\s+)?(\")?(#)(if\\s+!defined\\(AFX_RESOURCE_DLL\\)\\s+\\|\\|\\s+defined\\()(\\w+)(\\))

ただし、最後の部分で問題が発生しています。

\r\n"

私はこれを一致させ、これをオプションにすることができます。これで問題ありません。

(\\r\\n")

ただし、存在する場合はグループでキャプチャしたいと考えています(貪欲が必要だと思います)これまでのところ、オプションであるため、存在する場合は一致しませんでした。

正規表現エンジンが存在する場合でも強制的に検索を続行して、キャプチャ グループを取得できますか?

4

1 に答える 1

1

あなたはこのようなものが欲しいです:

string pattern = @"(?<=#if\s+!\s*defined\s*\(\s*AFX_RESOURCE_DLL\s*\)\s*\|\|\s*defined\s*\(\s*)\w+(?=\s*\))";
string result = Regex.Replace(s, pattern, match => Hash(match.Value));

これにより、次のような出力が得られます。

#if !defined(AFX_RESOURCE_DLL) || defined(QUZYX1RBUkdfRU5V)
   "#if !defined(AFX_RESOURCE_DLL) || defined(QUZYX1RBUkdfRU5V)\r\n"

正規表現は少し醜いですが、それは私がより多くのスペースを許可しているためです。通常、次のもので構成されます。

(?<=...) #A positive lookbehind with text that must appear before the match
\w+      #Text to replace
(?=...)  #A positive lookahead with text that must appear after the match
于 2012-09-06T13:33:29.417 に答える