简化正则表达式量词

时间:2014-06-08 18:02:52

标签: regex

我目前正在开发一个简化创建正则表达式模式的库。

为了生成最清晰的模式,我想在可能的情况下简化量词。假设已发出以下子模式:

(?:\d+)?

以上内容可简化为\d*,但假设(?:ℝ+)?始终可以简化为ℝ*也是正确的,其中是任意的(括号内) ,如有必要)正则表达式?

如果是,对于以下情况应该如此,对吧?

  • (?:ℝ+)? => ℝ*
  • (?:ℝ+)* => ℝ*
  • (?:ℝ+)+ => ℝ+
  • (?:ℝ*)? => ℝ*
  • (?:ℝ*)* => ℝ*
  • (?:ℝ*)+ => ℝ*
  • (?:ℝ?)? => ℝ?
  • (?:ℝ?)+ => ℝ*
  • (?:ℝ?)* => ℝ*

2 个答案:

答案 0 :(得分:2)

我建议将量词转换为( m n )重复计数:

  • *是(0,∞),
  • +是(1,∞)和
  • ?是(0,1)。

然后制定组合量词的规则。一般来说,(ℝ{m1, n1}){m2, n2}是什么?如果 m 1 m ℝ{m1·m2, n1·n2}。 > 2 大于1.

答案 1 :(得分:1)

是的,你是对的。而且你应该总是使用较小的一个,因为嵌套的重复很容易catastrophic backtracking。因此,除了不同的执行行为,它们将匹配相同的语言。