Frage

müssen nur sehen, ob ein Absatz ein „Stoppwort“ enthält, sind die Stoppwörter in einem Array unten.

Ich hatte die Formel:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

    foreach ($pattern_array as $pattern) {
      if (preg_match('/'.$pattern.')/i', $paragraph)) {
        $stopwords = 1;
      }
    }

Welche funktioniert gut genug, aber für kurze Wörter wie ‚Pan‘ ein Wort wie ‚Panko‘ als Stoppwort identifiziert wird.

So ist die regex wäre etwas, wie es, bevor es einen Raum zu haben hat oder sein, den Beginn einer neuen Zeile und jedem Ende in einem Punkt / space / Komma / (andere nicht Zeichen Objekte).

Auch wie könnte ich php sagen die Schleife, sobald ein Stoppwort identifiziert wird, verlassen?

Danke Jungs, verlangsamt das Lernen regex wie ich gehen!

War es hilfreich?

Lösung

Verwenden \b(preheat|minutes|stir|heat|put|bowl|pan)\b als regex. Auf diese Weise, Sie benötigen nur eine regex (kein Looping erforderlich) und durch die \b Wortgrenze Behauptungen verwenden, stellen Sie sicher, dass nur ganze Wörter übereinstimmen.

Andere Tipps

Lassen Sie sich diese nicht versucht, aber \b sollte die Zeichengruppe sein, die Sie suchen. Aus dem PHP-Handbuch :

 \b   word boundary

Ihr Code würde dann in etwa so aussehen:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

foreach ($pattern_array as $pattern) {
  if (preg_match('/\b'.$pattern.'\b/i', $paragraph)) { // also removed the ')'
    $stopwords = 1;
    break; // to exit the loop
  }
}

Edit: scheint, die Menschen besser dran sind \ b verwenden, so änderte es dies entsprechend

Sie müssen hinzufügen \b (die Wortgrenze steht), um Ihre Regex wie folgt aus:

'/\b'.$pattern.'\b/i'

Sie scheinen einen Tippfehler in Ihrem Code zu haben, weil Sie entweder eine wörtliche schließende Klammer (und nicht Teile der Worte entsprechen), oder Sie haben eine offene schließende Klammer.

1. Sie können "\ b" verwenden für Wortgrenzen zu überprüfen. Einer Wortgrenze wird als die Grenze zwischen einem Wortzeichen und einem Nicht-Wortzeichen definiert. Wort-Zeichen sind Buchstaben, Zahlen und Unterstrich.

2 Sie können alles auf einmal tun, indem Sie "|".

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top