Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何创建双向和正则表达式?_Regex_Pcre_Regex Lookarounds_Regex Greedy - Fatal编程技术网

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

Regex 如何创建双向和正则表达式?,regex,pcre,regex-lookarounds,regex-greedy,Regex,Pcre,Regex Lookarounds,Regex Greedy,问题陈述:我需要创建一个正则表达式来双向匹配文本。我所说的双向的意思是,我希望正则表达式以任何顺序匹配少数关键字的出现,即,如果我说a双向和B,那么它将作为a.*B和B.*a。我需要一个正则表达式来这样做 以三个字符串a、b和c为例进行解释,我需要一个匹配的正则表达式:“随机字符串a随机字符串b随机字符串c”、“随机字符串a随机字符串c随机字符串b”、“随机字符串b随机字符串a随机字符串c”、“随机字符串b随机字符串c随机字符串a”、“随机字符串c随机字符串a随机字符串b”,“随机字符串c随机字

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

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

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

  • (A.*B|B.*A)
  • ((?=.*A)。*(?=.*B)。*)
  • 现在的问题是,如果我使用第二种方法来创建包含五个关键字的正则表达式,我会得到类似于
    ((?=.*a)。*(?=.*b)。*(?=.*c)。*(?=.*d)。*(?=.*e)。*)
    。对于更大的句子,我会得到以下异常

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

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

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

    现在,我想了解您认为最好的方法是什么,以及是否有其他方法实现此正则表达式。请注意,我必须为此编写一个正则表达式,我不能只在较大的文本中搜索子字符串(使用Contains或类似方法)

    为了以三个字符串a、b和c为例进行解释,我需要一个匹配的正则表达式:“abc”、“acb”、“bac”、“bca”、“cab”、“cba”


    你好,阿维纳什,很抱歉造成混淆。我已经编辑了测试用例。变化是a、b和c之间可以发生任何事情,但是顺序应该无关紧要。然后这个
    ^(?=.*a)(?=.*b)(?=.*c)。*[abc].[abc].[abc].*$
    ^(?=.*?a)(?=.*?b)(?=.*?c)[abc]{3}$