Regex匹配一个可选的结尾,并且更喜欢这样做



我对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

相关内容

最新更新