0

我对正则表达式不熟悉,并希望匹配这两行:

#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 回答