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

时间:2015-07-02 12:31:28

标签: regex pcre regex-lookarounds regex-greedy

问题陈述:我需要创建一个双向匹配文本的正则表达式。我的双向意思是我想要一个正则表达式来匹配任何顺序中几个关键字的出现,即如果我说双向和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).*)
  3. 现在的问题是,如果我使用第二种方式创建具有五个关键字的正则表达式,我会想出((?=.*a).*(?=.*b).*(?=.*c).*(?=.*d).*(?=.*e).*)之类的东西。在较大的句子中,我得到以下异常

      

    RecursionLimit ='_ MatchingRegex._info.RecursionLimit'引发了类型'System.InvalidOperationException'的异常   base {System.SystemException} = {“pcre16_fullinfo中的错误,代码:-33”}。

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

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

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

1 个答案:

答案 0 :(得分:0)

  

通过举例说明三个字符串a,b和c来解释,我需要一个匹配的正则表达式:“abc”,“acb”,“bac”,“bca”,“cab”,“cba”

Unit player = Unit("something",100,1);

DEMO