结合正则表达式匹配

时间:2011-06-27 19:13:29

标签: regex perl

是否可以将这5个正则表达式组合成一个(或至少其中一些)?

/[ ,][ABCabc][:]\d+/g
/[ ,][ABCabc][ ]?[=][ ]?\d+/g
/^[ABCabc][:]\d+/g
/^[ABCabc][ ]?[=][ ]?\d+/g
/[\\][\w][ABCabc][ ]?[=][ ]?\d+/g

提示,更正和改进也会很棒。

4 个答案:

答案 0 :(得分:7)

首先,减少它们:

  • /[ ,][a-c]:\d+/gi
  • /[ ,][a-c] ?= ?\d+/gi
  • /^[a-c]:\d+/gi
  • /^[a-c] ?= ?\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

现在,通过组合它们,你的意思是说你正在测试一场比赛,而不是全部,对吧?所以第2步:

  • /[ ,][a-c](:| ?= ?)\d+/gi
  • /^[a-c]:\d+/gi
  • /^[a-c] ?= ?\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

第3步:

  • /[ ,][a-c](:| ?= ?)\d+/gi
  • /^[a-c](:| ?= ?)\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

第4步:

  • /(^| |,)[a-c](:| ?= ?)\d+/gi
  • /\\\w[a-c] ?= ?\d+/gi

第5步:

  • /((^| |,)[a-c](:| ?= ?)|\\\w[a-c] ?= ?)\d+/gi

瞧。你可以使用第5步的捕获,但我不会让事情复杂化。

如果可以,请坚持使用步骤4中的结果。步骤5使正则表达式变得冗长而令人困惑。

答案 1 :(得分:2)

您可能需要查看Regexp::Assemble

答案 2 :(得分:0)

你总是可以将正则表达式合并为一个,只需通过(regex1)|(regex2)|(regex3)...(如果你的意思是“合并为一个”)

问题是你是否应该,当然?正常情况下,正则表达式很难阅读,并且可以鼓励您在将来更容易理解和修改它们。

答案 3 :(得分:0)

如果通过组合你意味着正则表达式测试,那么如果任何模式匹配你得到一个匹配,是的:

(?:
    (?:/[ ,][ABCabc][:]\d+)|
    (?:/[ ,][ABCabc][ ]?[=][ ]?\d+)|
    (?:/^[ABCabc][:]\d+)|
    (?:/^[ABCabc][ ]?[=][ ]?\d+)|
    (?:/[\\][\w][ABCabc][ ]?[=][ ]?\d+)
)/g