-1

给定一个正则表达式 re 和一个输入字符串 str,我想找到 str 的最大子字符串,它从匹配 re 的最小位置开始。

特例:

re = Regex("a+|[ax](bc)*"); str = "yyabcbcb"

将 re 与 str 匹配应该返回匹配的字符串"abcbc"(而不是"a"像 PCRE 那样)。我还记得,如果交替的顺序发生变化,结果就是我想要的。

4

2 回答 2

0

从我的角度来看,你的问题有两个问题。

首先是改变交替的顺序,结果应该改变。

对于字符串中的每个“a”,它可以匹配“a+”或“ax*”。因此,将“a”与正则表达式中的交替匹配是不明确的。

其次,为了找到最大的子串,它需要最长匹配的匹配模式。据我所知,@Cosinus 提到只有RE2提供了这样的功能。

所以我的建议是将“a+|ax*”分成两个正则表达式,在每个正则表达式中找到最大的子字符串,然后比较两个子字符串的位置。

至于找到最长的匹配,你也可以在这里参考之前的正则表达式帖子描述。主要思想是搜索从字符串位置 0 到 len(str) 的子字符串,并在找到匹配的子字符串时跟踪长度和位置。

PS 一些语言提供类似于“findall()”的正则表达式函数。小心使用它们,因为返回可能是不重叠的匹配项。并且非重叠匹配不一定包含最长的匹配子串。

于 2019-05-11T03:34:09.373 回答
0

我发现的选项是:

  1. POSIX 扩展 RE - 可能已过时,由 egrep 使用...
  2. RE2 by Google - 开源RE2 - C++ - 也可用 C 包装器
于 2018-02-09T15:10:55.690 回答