如何创建双向和正则表达式?

How to create a bi-directional and regex?

问题陈述:我需要创建一个正则表达式来双向匹配文本。我所说的双向的意思是我想要一个正则表达式以任何顺序匹配几个关键字的出现,即如果我说 A 双向和 B,那么它应该作为 A.*BB.*A .我需要一个正则表达式来这样做。

以三个字符串 a、b 和 c 为例进行解释,我需要一个匹配的正则表达式:"randomstring a randomstring b randomstring c"、"randomstring a randomstring c randomstring b"、"randomstring b randomstring a randomstring c"、"randomstring b randomstring c randomstring a" , "randomstring c randomstring a randomstring b", "randomstring c randomstring b randomstring a"

我尝试了什么:我想出了以下两个正则表达式来解决这个问题:

  1. (A.*B|B.*A)
  2. ((?=.*A).*(?=.*B).*)

现在的问题是,如果我使用第二种方法创建具有五个关键字的正则表达式,我会想出类似 ((?=.*a).*(?=.*b).*(?=.*c).*(?=.*d).*(?=.*e).*) 的东西。在较大的句子中,我得到以下异常

RecursionLimit = '_MatchingRegex._info.RecursionLimit' threw an exception of type 'System.InvalidOperationException' base {System.SystemException} = {"Error in pcre16_fullinfo, code: -33"}.

我正在使用 .NET 版本的 PCRE 进行处理。

而且,如果我使用第一种方式,正则表达式将变得相当长且难以维护。它也可能有性能问题,因为正则表达式引擎的性能也取决于正则表达式的长度。

现在我正在寻找适合您的最佳方法的见解,以及是否有任何其他方法可以实现此正则表达式。请注意,我必须为此编写一个正则表达式,我不能只在较大的文本中搜索子字符串的出现(使用 Contains 或类似方法)。

To explain by taking example of three strings a, b and c, I need a regex which would match: "abc", "acb", "bac", "bca", "cab", "cba"

^(?=.*?a)(?=.*?b)(?=.*?c)[abc]{3}$

DEMO