Frage

Hey also was ich tun möchte, besorge die Inhalte für den ersten Absatz.String $blog_post enthält eine Menge an Paragraphen, die im folgenden format:

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

Das problem, das ich gelaufen bin ist, dass ich Schreibe, eine regex zu greifen, alles, was zwischen dem ersten <p> - tag und der ersten Schließung </p> tag.Es ist jedoch packte das erste <p> - tag und die letzten schließen </p> - tag, die Ergebnisse in mich, packte alles ein.

Hier ist meine aktuellen code:

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;
War es hilfreich?

Lösung

Gut, sysrqb lassen Sie mit etwas in dem ersten Absatz angenommen, es gibt keine andere html-Absatz.Möchten Sie vielleicht so etwas wie dieses

<p>.*?</p>

Die Platzierung die ? nach Ihrer * macht es nicht-gierig, was bedeutet, es passt nur so wenig text wie nötig vor dem matching der </p>.

Andere Tipps

Wenn Sie preg_match, verwenden Sie die "U" Flagge, um es un-gierig.

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

$matches[1] enthält dann den ersten Absatz.

Es wäre wahrscheinlich einfacher und schneller zu bedienen strpos() zu finden, die position des ersten

 <p>

und erste

</p>

verwenden Sie dann substr() zum extrahieren der Absatz.

 $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>'));

Edit: Tatsächlich ist die regex, die in anderen Antworten wird einfacher und schneller...Ihre große komplexe regex-in der Frage verwirrt mich...

Die Verwendung Regulärer Ausdrücke für html-parsing ist nie die richtige Lösung.Sollten Sie die Verwendung von XPATH für diesen speziellen Fall:

$string = <<<XML
<a>
 <b>
  <c>texto</c>
  <c>cosas</c>
 </b>
 <d>
  <c>código</c>
 </d>
</a>
XML;

$xml = new SimpleXMLElement($string);

/* Busca <a><b><c> */
$resultado = $xml->xpath('//p[1]');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top