【问题标题】:php - use of preg_match or preg_match_allphp - 使用 preg_match 或 preg_match_all
【发布时间】:2012-04-07 10:53:59
【问题描述】:
<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>

在 PHP 中使用 preg_matchpreg_match_all 我想检索文本“如果没有头部受伤是微不足道的,那么:”

我该怎么做?

【问题讨论】:

  • 您已经阅读了这些函数的文档并了解它们之间的区别,对吧?
  • 你遇到我们的search function了吗?以前也有过类似的问题。

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


【解决方案1】:

代码:

<?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];

?>

输出:

如果没有任何头部受伤是微不足道而不容忽视的,那么:

【讨论】:

    【解决方案2】:

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

    /&lt;\w+(?:\s+\w+=(?:(?:"[^"]*")|(?:'[^']*')))*\s*&gt;([^&lt;]+)&lt;/\w+&gt;/g

    将匹配所有仅包含文本节点的 html 标记(对于 xhtml 应该是这样,因为 &lt;p&gt;text&lt;br /&gt;&lt;/p&gt; 的格式不正确...)。

    所以&lt;p&gt;text&lt;/p&gt;&lt;br&gt;text2&lt;/br&gt; 将被匹配,因此文本将在捕获组 1 中。

    &lt;\w+(?:\s+\w+=(?:(?:"[^"]*")|(?:'[^']*')))*\s*&gt; 将捕获每个打开的 xhtml 标记

    ([^&lt;]+) 将捕获除

    之外的所有 cahrs,并将其放入捕获组中

    &lt;/\w+&gt; 终于抓住了结束标签...

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

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

    【讨论】:

      【解决方案3】:

      模式将是这样的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多