通常,正则表达式引擎会在字符串中找到最左边,最长的匹配(除非您明确告诉它不要).
因此,正则表达式X+将总是匹配XXXXX在testXXXXX..
但是,如果字符串中存在多个潜在匹配项,则标准find方法将始终找到第一个匹配项,而不一定是最长匹配项(例如,in test1XXtest2XXXXX.).要在此处找到最长匹配项,您需要使用findall正则表达式引擎的方法,然后测量所有匹配项的长度.
在C#中,这可能如下所示:
StringCollection resultList = new StringCollection();
Regex regexObj = new Regex("[ ]+");
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
resultList.Add(matchResult.Value);
matchResult = matchResult.NextMatch();
}
Run Code Online (Sandbox Code Playgroud)
(之后,找到最长的字符串resultList.)
但是,如果潜在匹配可能重叠,则存在问题.以正则表达式为例
AB+A
Run Code Online (Sandbox Code Playgroud)
和字符串
ABABBA
Run Code Online (Sandbox Code Playgroud)
如果你应用正则表达式,你只能找到ABA因为正则表达式引擎A在第一次匹配后消耗了第二次,所以它开始第二次尝试,当然B是BBA失败.这是"最左边最长"行为的结果,如果你想绕过它,你必须将"正则表达式""手动"重新应用到整个字符串,然后重新应用到整个字符串减去第一个字符,然后再到整个字符串减去前两个字符等