7

ねえ、私がやりたいのは、最初の段落のコンテンツを引っ掛けることです。文字列$blog_postには、次の形式の多数の段落が含まれています。

<p>Paragraph 1</p><p>Paragraph 2</p><p>Paragraph 3</p>

私が直面している問題は、最初の<p>タグと最初の終了</p>タグの間のすべてを取得する正規表現を書いていることです。ただし、最初の<p>タグと最後の終了</p>タグを取得しているため、すべてを取得しています。

これが私の現在のコードです:

if (preg_match("/[\\s]*<p>[\\s]*(?<firstparagraph>[\\s\\S]+)[\\s]*<\\/p>[\\s\\S]*/",$blog_post,$blog_paragraph))
   echo "<p>" . $blog_paragraph["firstparagraph"] . "</p>";
else
  echo $blog_post;
4

4 に答える 4

18

sysrqb では、最初の段落に他の html がないと仮定して、最初の段落にあるものすべてに一致させることができます。このようなものがもっと欲しいかもしれません

<p>.*?</p>

?your の後に を配置する*と、貪欲でなくなります</p>

于 2008-09-02T01:48:04.593 に答える
6

を使用する場合preg_matchは、「U」フラグを使用して非貪欲にします。

preg_match("/<p>(.*)<\/p>/U", $blog_post, &$matches);

$matches[1]最初の段落が含まれます。

于 2008-09-02T05:00:32.320 に答える
1

strpos()を使用して最初の位置を見つける方がおそらく簡単で高速です。

 <p>

そして最初に

</p>

次に、substr()を使用して段落を抽出します。

 $paragraph_start = strpos($blog_post, '<p>');
 $paragraph_end = strpos($blog_post, '</p>', $paragraph_start);
 $paragraph = substr($blog_post, $paragraph_start + strlen('<p>'), $paragraph_end - $paragraph_start - strlen('<p>'));

編集:実際には、他の人の回答の正規表現はより簡単で高速になります...質問の大きな複雑な正規表現は私を混乱させました...

于 2008-09-02T01:47:57.930 に答える