正则表达式(在C#中)以字符串开头,但匹配最后一次出现后的所有内容...

时间:2012-05-01 00:26:46

标签: c# regex expression

我正在尝试将C#中的一些“硬编码”变量初始化(从自定义语言)解析为多个文件到db,但我遇到了问题:

示例代码解析#1>>>

ArrayName[ArrayIndexVariable].arrayPropertyNameHex            = $A3

我正在尝试使用正则表达式:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameHex.+= ?(.+?)$";

然后返回.Success:

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

...等于 0? ...


示例代码解析#2>>>

ArrayName[ArrayIndexVariable].arrayPropertyNameInt            = 6942

我正在尝试使用正则表达式:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameInt.+?(\d+)$";

然而,也会返回.Success:

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

...等于 0? ......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为你的问题是你正在使用正则表达式中的贪婪限定符。在你的正则表达式中(为了便于阅读):

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+= ?(.+?)$";

.+之后arrayPropertyNameHex,“贪婪地”匹配到行尾的所有内容,因此您的捕获永远不会受到影响。只需将其更改为非贪婪的匹配(+?),它应该更好:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+?= ?(.+?)$";