正则表达式使用PHP匹配HTML <p>标记</p>

时间:2010-11-24 08:17:17

标签: php regex preg-match

我有一些像这样的内容

<p>some content, paragraph 1</p>
<p>some content, paragraph 2</p>
<p>some content, paragraph 3</p>

我想返回第一段,即

<p>some content, paragraph 1</p>

任何人都可以帮我处理正则表达式代码吗? '<p>(.*.)</p>'似乎无法正常工作

3 个答案:

答案 0 :(得分:10)

你可以这样做:

if (preg_match('%(<p[^>]*>.*?</p>)%i', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

你根据正常表达式测试你的字符串,如果有一些匹配,你得到第一个,只得到第一个,如果没有,$ result将是一个空字符串。

如果你需要获得超过第一个结果,你可以迭代$ regs数组。而且你需要找到任何其他标签来改变常规表达式来加工它,例如找到你使用的IMAGE标签:

(<img[^>]*>.*?</img>)

编辑:如果您要逐行处理(只有您要查找的标记),您可以在表达式周围放置^ ... $以匹配整行,如下所示:< / p>

if (preg_match('%^(<p[^>]*>.*?</p>)$%im', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

HTH,问候。

答案 1 :(得分:5)

阻止包含&lt; pre&gt;标签,可以使用:

if (preg_match('/(<p(>|\s+[^>]*>).*?<\/p>)/i', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

答案 2 :(得分:-2)

  if (preg_match("/\b1\b/i", "some content, paragraph 1")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}

其中1是匹配的术语......

这有什么帮助吗?