【问题标题】:RexEx to match a RegEx with a mixture of permutations and choices正则表达式匹配正则表达式与排列和选择的混合
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多