RexEx将RegEx与排列和选择的混合相匹配

时间:2015-04-23 11:43:58

标签: regex permutation mixing

我想检查一下我的学生是否可以获得该课题的RegEx:

  

我们想要一个从1到6的数字,然后从a到d的一个字母可以写成小或大。所以像1d,2A,4b,......

我希望从我的学生那里获得的RegEx应该是#include <string> #include <algorithm> #include <iostream> int main() { srand(time(0)); int N = 20000; std::string alphabet("ACGT"); std::string str; str.reserve(N); int int_array[19700]; // Populate int array for (int index = 0; index < 19700; index++) { if (index < 100) { int_array[index] = 0; } else { int_array[index] = (rand() % 4) + 1; } } // Want the array in a random order std::random_shuffle(&int_array[0], &int_array[19700]); // Now populate string from the int array for (int index = 0; index < 19700; index++) { switch(int_array[index]) { case 0: str += alphabet; break; case 1: str += 'A'; break; case 2: str += 'C'; break; case 3: str += 'G'; break; case 4: str += 'T'; break; default: break; } } // Print out to check what it looks like std::cout << str << std::endl; } [1-6][a-dA-D]或这两者的混合以及第二种的所有排列。

在我的研究中,我发现了this answer的排列:

[123456][abcdABCD]

并且它可以自己工作(也可以没有^(?:([1-4])(?!.*\1)){4}$ ),但是当我将它与选择运算符(^$)结合使用时,它允许重复|,而不是[111111][a-dA-D]我想拥有什么。

这是我试用的东西:

[\[]((?:([1-6])(?!.*\1)){6}|[1]\-[6])[\]][\[]((?:([a-dA-D])(?!.*\1)){8}|([a][\-][d][A][\-][D]|[A][\-][D][a][\-][d]))[\]]

TESTDATA:

[1-6][A-Da-d]
[123456][a-dA-D] 
[654321][AaBbCcDd]  
[241365][abcdABCD]

1 个答案:

答案 0 :(得分:0)

为了验证regex,我建议对他们进行一些单元测试,以验证您的期望...至少我会:

  • 验证它是有效正则表达式的测试。编译它。
  • 验证它的测试与简单的用例匹配。 1A1B
  • 针对A1B1^d88D
  • 等无效使用案例进行验证的测试