RegEx匹配三个字符串的序列以及中间的文本

时间:2017-11-14 22:07:12

标签: regex

我试图让正则表达式匹配包含第三个字符串的两个字符串之间的内容。我在使懒惰量词合作时遇到了麻烦,因为输入中存在多个这些字符串的实例,并且RegEx匹配了一些无用的东西,即:

Start...End...Start...End...Start...Middle...End

我实际上正在寻找(每场比赛只有一个开始和结束的实例):

Start...Middle...EndStart...Center...End

我非常确定我需要使用前瞻/后视,但是当我从概念上理解它们时,将它们付诸实践确实很困难。我在这里:

/<Start[\s\S]*?(Middle|Center)[\s\S]*?End>/gm

1 个答案:

答案 0 :(得分:2)

使用tempered greedy token

Start(?:(?!Start|End)[\s\S])*?(Middle|Center)[\s\S]*?End
     ^^^^^^^^^^^^^^^^^^^^^^^^^ 

请参阅regex demo

<强>详情

  • Start - 文字字符串
  • (?:(?!Start|End)[\s\S])*? - 任何char,0+重复,尽可能少,不是StartEnd序列的起点
  • (Middle|Center) - 第1组:MiddleCenter
  • [\s\S]*? - 任意0个字符,尽可能少
  • End - 文字字符串