如何匹配相同的结果多一次

时间:2017-04-22 18:13:49

标签: php regex

我在定义问题时遇到了一些问题,对不好的标题感到抱歉。

我知道REGEX对于HTML很难,但我没有其他选择  我只是告诉你我有什么。

我有以下字符串:

<span id=pink>some short text</span>
  more text that can be a few lines
 <span id=pink>again a short text</span> 
 More text that's abiding the same logic
<span id=pink>Repeat</span>...(more of these)

这会重复多次。

现在我想在文本和下一个文本之间提取文本。以上示例的含义我想返回:

  • 更多文字,可以是几行
  • 更多符合相同逻辑的文字

现在我尝试了以下正则表达式:

preg_match_all('/<span id=pink>.*?<\/span>(.*?)<span id=pink>.*?</span>/s',$data,$content);

哪个部分有效,但问题是在找到第一个匹配后,它没有检测到关闭前一个组作为下一个组的开启者的<span id=pink>。与上面的例子有关,它只能找到第一个组,并且有更多&#34;行&#34;在字符串中,它将跳过其他所有组。

编辑:

  • 字符串中没有新行,这里只是为了简化。
  • 我知道HTML解析使用解析器而不是正则表达式更好,但遗憾的是我需要使用正则表达式来解决这个问题。

我该如何解决这个问题?感觉我错过了一些简单的解决方案,是否有一个修改器可能实现这一目标?

谢谢, 埃里克

1 个答案:

答案 0 :(得分:0)

  

基本上我想要的是&#34;关闭&#34;模式被重用为&#34;开放&#34;图案

如果是这种情况,那么你可以使用前瞻:

<span id=pink>.*?<\/span>(.*?)(?=<span|$)

Live Demo

您当然仍然需要使用单行标志。