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

Ati*_*din 6 php regex preg-match

我有这样的内容

<p>some content, paragraph 1</p>
<p>some content, paragraph 2</p>
<p>some content, paragraph 3</p>
Run Code Online (Sandbox Code Playgroud)

我想返回第一段即

<p>some content, paragraph 1</p>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我使用正则表达式代码吗?
'<p>(.*.)</p>'似乎没有用

Sub*_*niC 10

你可以这样做:

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

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

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

(<img[^>]*>.*?</img>)
Run Code Online (Sandbox Code Playgroud)

编辑:如果你是逐行处理(只有你正在寻找的标签),你可以在表达式周围放置^ ... $以匹配整行,如下所示:

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

HTH,问候.


小智 5

防止包含<pre>标签,可以使用:

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