正则表达式从最后查找匹配的字符串

时间:2014-11-19 04:59:06

标签: c# regex

我有以下字符串

Copy(objid1,objid2)

我正在使用以下正则表达式匹配

objid(?<id>\d{0,3})

然而,我查看输出objid2,此正则表达式返回objid1

我是否有任何改变以找到我想要的输出。 我以为我将返回所有匹配的子字符串,但只返回第一个但是我只需要最后匹配的子字符串。

我不想使用任何子字符串函数,因为我不知道要查找的确切长度。

提前致谢。

修改

请看我的尝试。

Match output = Regex.Match("Copy(objid1,objid2)", @".*(objid(?<id>\d{0,3}))", RegexOptions.Singleline | RegexOptions.IgnoreCase); //objid(?<id>\d{0,3})

                    if (output.Success)
                    {
                        String ProcessString = ((System.Text.RegularExpressions.Capture)(output.Groups[0])).Value;//output.Value;
    }

2 个答案:

答案 0 :(得分:1)

,objid(?<id>\d{0,3})(?![^,)]*,)

试试这个。看看演示。

http://regex101.com/r/lZ5mN8/26

答案 1 :(得分:1)

在您提到的模式之前加上.*以获得最后一场比赛。

@".*(objid(?<id>\d{0,3}))"

DEMO

从组索引1中获取所需的字符串。

要获得多行字符串中的最后一个匹配项,您需要启用DOTALL修饰符。

(?s).*(objid(?<id>\d{0,3}))

DEMO