我想检查一下我的学生是否可以获得该课题的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]
答案 0 :(得分:0)
为了验证regex
,我建议对他们进行一些单元测试,以验证您的期望...至少我会:
1A
,1B
A1
,B1
,^d
,88D