У меня есть такой контент, как этот
<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>'
похоже, не работает
вы можете сделать это так:
if (preg_match('%(<p[^>]*>.*?</p>)%i', $subject, $regs)) { $result = $regs[1]; } else { $result = ""; }
Вы тестируете свою строку против регулярного выражения, если есть какое-то совпадение, вы получаете первый и только первый, если нет, то $ result будет пустой строкой.
Если вам нужно получить больше, чем первый результат, вы можете перебирать массив $ regs. И вам нужно найти любой другой тег, чтобы изменить регулярное выражение, чтобы его обработать, например, чтобы найти теги IMAGE, которые вы используете:
(<img[^>]*>.*?</img>)
EDIT: если вы обрабатываете строку за строкой (только с тегом, который вы ищете), вы можете поместить ^ … $ вокруг выражения, чтобы соответствовать полной строке, например:
if (preg_match('%^(<p[^>]*>.*?</p>)$%im', $subject, $regs)) { $result = $regs[1]; } else { $result = ""; }
HTH, С уважением.
Предотвратить включение тега <pre>, можно использовать:
if (preg_match('/(<p(>|\s+[^>]*>).*?<\/p>)/i', $subject, $regs)) { $result = $regs[1]; } else { $result = ""; }
if (preg_match("/\b1\b/i", "some content, paragraph 1")) { echo "A match was found."; } else { echo "A match was not found."; }
Где 1 – согласованный термин …
Это какая-то помощь?