PHP正则表达式:匹配最接近的一个

时间:2013-01-09 15:00:54

标签: php regex html-parsing

我有一个像这样的字符串

<div><span style="">toto</span> some character <span>toto2</span></div>

我的正则表达式:

/(<span .*>)(.*)(<\/span>)/

我使用preg_match并返回整个字符串

<span style="">toto</span> some character <span>toto2</span>

我希望它返回:

<span style="">toto</span>
and
<span>toto2</span>

我需要做些什么才能实现这一目标?感谢。

2 个答案:

答案 0 :(得分:6)

这个怎么样:

/(<span[^>]*>)(.*?)(<\/span>)/

查看PHP preg_match Repetition上的文档:

  

默认情况下,量词是“贪婪的”,也就是说,它们尽可能匹配

  

但是,如果量词后跟一个问号,那么它会变得懒惰,而是匹配可能的最小次数

答案 1 :(得分:1)

即使我猜所有以前的答案都是正确的,我只想添加它,因为你只想捕获整个表达式(即从中),你不必用()捕获正则表达式中的eveything 以下是您所期望的而不捕获其他表达式

/(<span\w*[^>]*>[^<]*<\/span>)/

(在http://rubular.com/上测试)

编辑:当然PHP和ruby regexp实现之间可能存在一些差异,但想法是一样的:)