使用PHP的正则表达式匹配HTML <p>标签

6

我有一些类似这样的内容

<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>' 似乎无效。


2
(相关)解析HTML的最佳方法 - Gordon
3个回答

11

你可以通过以下方式实现:

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

你可以使用正则表达式测试字符串,如果匹配成功,你只能获取第一个匹配结果,如果没有匹配成功,$result 将是一个空字符串。

如果你需要获取多个匹配结果,你可以遍历 $regs 数组。如果你需要查找其他标签,只需更改正则表达式即可。例如,查找 IMAGE 标签,你可以使用:

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

编辑:如果您正在逐行处理(仅查找您要查找的标签),则可以将^...$放在表达式周围以匹配整行,例如:

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

祝一切顺利,敬礼。


你好,你如何使用“for”(循环)?逐个字符处理?for($i = 0; $i <= $strlen; $i ++){if($ cadena {$ i} ==“ <”){NOT WORKS}} - user3402040

5

避免使用<pre>标签,可以使用以下方法:

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

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

其中1为匹配项...

这有帮助吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接