给定正则表达式re和输入字符串str,我想找到str的最大子字符串,它从最小位置开始,匹配re。
特例:
re = Regex("a+|[ax](bc)*"); str = "yyabcbcb"
匹配re与str应返回匹配的字符串"abcbc"
(而不是"a"
,如PCRE所做的那样)。我还记得,如果改变顺序,结果就像我想要的那样。
答案 0 :(得分:0)
我找到的选项是:
答案 1 :(得分:0)
从我的角度来看,您的问题有两个问题。
首先是改变结果的顺序应该改变。
对于字符串中的每个单个“ a”,它都可以匹配“ a +”或“ ax *”。 因此,将'a'匹配到正则表达式中的替代词是不明确的。
第二,要找到最大的子字符串,它需要最长匹配的匹配模式。据我所知,只有RE2提供了这样的功能,如@Cosinus所述。
因此,我的建议是将“ a + | ax *”分成两个正则表达式,在每个正则表达式中找到最大子串,然后比较两个子串的位置。
要找到最长的匹配项,您还可以引用previous regex post description here。主要思想是搜索从字符串位置0到len(str)开始的子字符串,并在找到匹配的子字符串时跟踪长度和位置。
P.S。某些语言提供类似于“ findall()”的正则表达式功能。 请小心使用它们,因为返回值可能是不重叠的匹配项。而且非重叠匹配不一定包含最长的匹配子字符串。