Регулярное выражение для соответствия тегу HTML <p>с использованием PHP - PullRequest
6 голосов
/ 24 ноября 2010

У меня есть такой контент

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

10 голосов
/ 24 ноября 2010

Вы можете сделать это следующим образом:

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 = "";
}

HTH, С уважением.

5 голосов
/ 30 марта 2011

Предотвращение включения

tag, can use:</p>

<pre><code>if (preg_match('/(<p(>|\s+[^>]*>).*?<\/p>)/i', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}
</code>
0 голосов
/ 24 ноября 2010
  if (preg_match("/\b1\b/i", "some content, paragraph 1")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}

Где 1 - соответствующий термин ...

Это какая-то помощь?

...