.net regex-在特定模式之后开始匹配

.net regex-在特定模式之后开始匹配,.net,regex,.net,Regex,我在试图找到正则表达式时遇到了麻烦 我有下面的正则表达式 ([{\-\+~a-zA-Z0-9]+){3,} 但是,我需要捕获某个字符后所有可能的匹配项,在本例中是} faz.}a..sd..3·$....................foo....e..P...0...................bar foo和bar必须匹配,但faz不应匹配。请注意,我不能使用+(?=}),因为它将}之后的所有内容捕获到单个匹配中。我在网上搜索,每一个答案都表明了这种模式 提前感谢。在.NET中,您

我在试图找到正则表达式时遇到了麻烦

我有下面的正则表达式

([{\-\+~a-zA-Z0-9]+){3,}
但是,我需要捕获某个字符后所有可能的匹配项,在本例中是
}

faz.}a..sd..3·$....................foo....e..P...0...................bar
foo
bar
必须匹配,但
faz
不应匹配。请注意,我不能使用
+(?=})
,因为它将
}
之后的所有内容捕获到单个匹配中。我在网上搜索,每一个答案都表明了这种模式


提前感谢。

在.NET中,您可以使用正的可变长度查找来匹配仅在特定字符/子字符串/模式之后出现的模式:

(?<=}.*)[-{+~a-zA-Z0-9]{3,}
^^^^^^^^


在这里,
(?![^}]*})
是一种消极的前瞻,如果在与
[-{+~a-zA-Z0-9]{3,}
模式匹配的“word”右侧的任何0+字符之后有一个
}
,则匹配失败。

(?s)}(?:.*([{-+~a-zA-Z0-9]{3,}))+

阅读版本

 (?s)
 }
 (?:
      .*? 
      ( [{\-+~a-zA-Z0-9]{3,} )      # (1)
 )+
#


什么是环境?工具?编程语言?试试看,我目前正在用Regex101(pcre)进行测试,如果可行的话,我会用C#实现它。啊哈,那么使用一个错误的站点。pcre和.NET regex不一样。但是上面的建议在两种风格中都是一样的。在.NET中,你也可以使用。
 (?s)
 }
 (?:
      .*? 
      ( [{\-+~a-zA-Z0-9]{3,} )      # (1)
 )+
string inp = @"faz.}a..sd..3·$....................foo....e..P...0...................bar";
Regex Rx1 = new Regex( @"(?s)}(?:.*?([{\-+~a-zA-Z0-9]{3,}))+" );
Match M1 = Rx1.Match( inp );
if ( M1.Success )
{
    CaptureCollection cc = M1.Groups[1].Captures;
    for (int i = 0; i < cc.Count; i++)
        Console.WriteLine("{0}", cc[i].Value);
}
foo  
bar  
Press any key to continue . . .