找到与正则表达式匹配的最大输入字符串

时间:2018-02-04 18:54:34

标签: string pcre regex-alternation

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

特例:

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

匹配re与str应返回匹配的字符串"abcbc"(而不是"a",如PCRE所做的那样)。我还记得,如果改变顺序,结果就像我想要的那样。

2 个答案:

答案 0 :(得分:0)

我找到的选项是:

  1. POSIX扩展RE - 可能已过时,由egrep ...
  2. 使用
  3. Google的RE2 - 开源RE2 - C ++ - 也可以使用C-wrapper

答案 1 :(得分:0)

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

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

  

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

第二,要找到最大的子字符串,它需要最长匹配的匹配模式。据我所知,只有RE2提供了这样的功能,如@Cosinus所述。

  

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

要找到最长的匹配项,您还可以引用previous regex post description here。主要思想是搜索从字符串位置0到len(str)开始的子字符串,并在找到匹配的子字符串时跟踪长度和位置。

P.S。某些语言提供类似于“ findall()”的正则表达式功能。 请小心使用它们,因为返回值可能是不重叠的匹配项。而且非重叠匹配不一定包含最长的匹配子字符串。