给定一个正则表达式 re 和一个输入字符串 str,我想找到 str 的最大子字符串,它从匹配 re 的最小位置开始。
特例:
re = Regex("a+|[ax](bc)*"); str = "yyabcbcb"
将 re 与 str 匹配应该返回匹配的字符串"abcbc"
(而不是"a"
像 PCRE 那样)。我还记得,如果交替的顺序发生变化,结果就是我想要的。
给定一个正则表达式 re 和一个输入字符串 str,我想找到 str 的最大子字符串,它从匹配 re 的最小位置开始。
特例:
re = Regex("a+|[ax](bc)*"); str = "yyabcbcb"
将 re 与 str 匹配应该返回匹配的字符串"abcbc"
(而不是"a"
像 PCRE 那样)。我还记得,如果交替的顺序发生变化,结果就是我想要的。
从我的角度来看,你的问题有两个问题。
首先是改变交替的顺序,结果应该改变。
对于字符串中的每个“a”,它可以匹配“a+”或“ax*”。因此,将“a”与正则表达式中的交替匹配是不明确的。
其次,为了找到最大的子串,它需要最长匹配的匹配模式。据我所知,@Cosinus 提到只有RE2提供了这样的功能。
所以我的建议是将“a+|ax*”分成两个正则表达式,在每个正则表达式中找到最大的子字符串,然后比较两个子字符串的位置。
至于找到最长的匹配,你也可以在这里参考之前的正则表达式帖子描述。主要思想是搜索从字符串位置 0 到 len(str) 的子字符串,并在找到匹配的子字符串时跟踪长度和位置。
PS 一些语言提供类似于“findall()”的正则表达式函数。小心使用它们,因为返回可能是不重叠的匹配项。并且非重叠匹配不一定包含最长的匹配子串。
我发现的选项是: