我对regex不熟悉,希望匹配这两行:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)rn"
到目前为止,我有这个:
(\s+)?(")?(#)(if\s+!defined\(AFX_RESOURCE_DLL\)\s+\|\|\s+defined\()(\w+)(\))
然而,最后一部分给我带来了麻烦:
rn"
我可以匹配这个,并使其可选,没有问题,用这个:
(\r\n")
然而,如果它在那里,我希望在一个小组中捕捉它(我认为贪婪是我需要的)到目前为止,我所有的尝试都导致它不匹配,因为它是可选的。
我可以强制regex引擎继续搜索吗,即使它在那里,这样我就可以为它获取一个捕获组了?
您想要这样的东西:
string pattern = @"(?<=#ifs+!s*defineds*(s*AFX_RESOURCE_DLLs*)s*||s*defineds*(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)rn"
正则表达式有点难看,但这是因为我允许更多的空间。通常包括:
(?<=...) #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