【发布时间】:2015-04-23 11:43:57
【问题描述】:
我想检查我的学生是否正确理解了该问题的 RegEx:
我们希望有一个从 1 到 6 的数字,然后是一个从 a 到 d 的字母,可以写成小写或大写。所以像 1d, 2A, 4b, ...
我想从我的学生那里得到的 RegEx 应该是 [1-6][a-dA-D] 或 [123456][abcdABCD] 或这两者的混合以及第二个的所有排列。
在我的研究中,我发现this answer 用于排列:
^(?:([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]))[\]]
测试数据:
[1-6][A-Da-d]
[123456][a-dA-D]
[654321][AaBbCcDd]
[241365][abcdABCD]
【问题讨论】:
-
您能否让您的问题更具表现力,添加一些示例并测试您想要运行 Regex 的数据?
-
这似乎是验证他们的答案的不好方法。仅针对一组测试用例验证答案会更容易、更清晰。
-
要么根据一组测试用例验证它,要么自己解析正则表达式模式来验证它——分配很简单,所以这种验证应该很简单。检查排列并不适合正则表达式。
-
除了我的想法之外,没有测试数据喷射。问题是,这是一个moodle在线课程,我为我大学的一门课程构建了它(供以后在现实生活中使用)。在该公式中,只能输入 4 个答案,这些答案都是明文或正则表达式。一个我需要检查所有错误的情况,除了正则表达式之外我没有其他想法,所以只有三种情况我可以检查正确的答案。我一开始没有考虑排列,但我担心我的教授会检查这些情况,然后我就有麻烦了......:/
-
还取决于正则表达式的风格...正在使用哪个解析器?
标签: regex permutation mixing