1

我有一个这样的字符串

<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>

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

4

2 回答 2

6

这个怎么样:

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

在PHP preg_match Repetition查看文档:

默认情况下,量词是“贪婪的”,即尽可能匹配

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

于 2013-01-09T15:07:58.723 回答
1

即使我猜所有以前的答案都是正确的,我只想补充一点,因为您只想捕获整个表达式(即 from to ),您不必捕获正则表达式中() 的所有内容以下内容可以满足您的期望而无需捕获附加表达式

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

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

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

于 2013-01-09T15:10:16.590 回答