将两个复杂的正则表达式与?

时间:2015-10-29 20:07:43

标签: regex

我有两个复杂的正则表达式,它们执行相同任务的两个部分。结果,我基本上是双重工作 - 一次使用rex A,一次使用rex B.我想使用| (or)将两者结合起来,这样就可以一次性完成。

雷克斯可以娶这两个人吗?

  • Rex A,对于包含在匹配的js-mmented md5中的字符串是正确的。
    EG:/*a1700e65a69859ac8c56b0baef91b61a*/this text, as well as the enclosing comments will be matched. There may or may not be a new line between this string and the closing md5/*a1700e65a69859ac8c56b0baef91b61a*/

    (\/\*(.){32}\*\/).*(\n)?\1
    
  • Rex B的表现相似,但对于html-stlye评论的问题:EG:<!--a1700e65a69859ac8c56b0baef91b61a-->text-text-text<!--a1700e65a69859ac8c56b0baef91b61a-->

    (<!--(.*)-->).*(\n)?\1
    

我尝试的事情:

// simple or. this ignores the latter of the or
(\/\*(.){32}\*\/).*(\n)?\1|(<!--(.){32}-->).*(\n)?\1
// thinking it may have been greedy, i switched it. No real change in behavior 
(<!--(.){32}-->).*(\n)?\1|(\/\*(.){32}\*\/).*(\n)?\1

我尝试将交换机放在捕获组中,而不是RexA|RexB。这似乎有类似的效果。它将匹配匹配注释之间的任何内容,但似乎排除了包装它的封闭注释。

((\/\*)|(<!--)(.){32}(\*\/)|(-->)).*(\n)?\1

Here是regex101演示。

任何提示?

2 个答案:

答案 0 :(得分:0)

如何将每个人包裹在非捕获组<中,并在中间放置一个替代(?:)

|

答案 1 :(得分:0)

从左侧开始计算捕获组的编号,计算捕获组的左括号。根据我的统计,这意味着您的\1尝试中的最后|(两者)应该改为\4