php - 使用preg_match或preg_match_all

时间:2012-04-07 10:53:59

标签: php regex preg-match preg-match-all

<font size="+1"><font size="+2" color="green"><b>1.</b> 
</font><b>If no head injury is too trivial to be neglected, then:</b></font>

在使用preg_matchpreg_match_all的PHP中,我想检索文本“如果没有头部受伤太容易被忽视,那么:”

我该怎么做?

3 个答案:

答案 0 :(得分:2)

代码:

<?php

$str = '<font size="+1"><font size="+2" color="green"><b>1.</b></font><b>If no head injury is too trivial to be neglected, then:</b></font>';
$pattern = "/font><b>(.+)<\/b>/";
preg_match($pattern,$str,$matches);

echo $matches[1];

?>

输出

  

如果没有头部受伤太容易被忽视,那么:

答案 1 :(得分:0)

我不确定,在你选择要捕获的字符串的条件下,为什么得到1.未捕获,但是你的2.字符串呢?只要你不解释我只能猜测,所以作为一个表达式:

/<\w+(?:\s+\w+=(?:(?:"[^"]*")|(?:'[^']*')))*\s*>([^<]+)</\w+>/g

将匹配所有html标记,它们只包含一个文本节点(对于xhtml应该是这种情况,因为<p>text<br /></p>不能正常...)。

因此<p>text</p><br>text2</br>将匹配,因此文本将位于捕获组1中。

<\w+(?:\s+\w+=(?:(?:"[^"]*")|(?:'[^']*')))*\s*>将捕获每个开头的xhtml标记

([^<]+)将捕获所有来自&lt;并将其放入捕获组

</\w+>终于抓住了结束标签......

g是全局标志,因此表达式可以捕获多个结果......

祝你好运,如果你需要不同的东西,请更准确一点......

答案 2 :(得分:-1)

模式将是这样的:

/<\s*b\s*>(.+)<\s*\/b\s*>/