匹配最长重复序列的正则表达式

mir*_*a . 3 regex text full-text-search

我想匹配至少重复一次的最长序列

拥有:

T_send_ack-new_amend_pending-cancel-replace_replaced_cancel_pending-cancel-replace_replaced

结果应该是:pending-cancel-replace_replaced

ste*_*ema 5

尝试这个

(.+)(?=.*\1)
Run Code Online (Sandbox Code Playgroud)

在 Regexr 上看到它

这将匹配具有至少一个字符的任何字符序列,该字符序列稍后在字符串中重复。

您需要存储您的匹配项,然后决定哪一个是最长的。

此解决方案需要您的正则表达式风格来支持反向引用和前瞻。

它将匹配任何具有至少一个字符的字符序列并将其.+存储在组 1 中,因为它周围有括号。下一步是正向前瞻(?=.*\1),如果捕获的序列稍后再次出现在字符串中,则为真。