.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 . . .