Question

Juste besoin de voir si un paragraphe contient un « mot d'arrêt », les mots d'arrêt sont dans un tableau ci-dessous.

J'ai eu la formule:

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

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

Ce qui fonctionne assez bien, mais pour des mots courts comme un « pan » mot comme « panko » est identifié comme un mot d'arrêt.

Ainsi, le regex serait quelque chose comme il doit avoir un espace avant ou le début d'une nouvelle ligne et l'une des extrémités dans un (des objets autres caractères non) point final / espace / virgule /.

Aussi comment pourrais-je dire php pour sortir de la boucle dès qu'un mot d'arrêt est identifié?

Merci les gars, ce qui ralentit l'apprentissage regex que je vais!

Était-ce utile?

La solution

Utilisez \b(preheat|minutes|stir|heat|put|bowl|pan)\b comme regex. De cette façon, vous avez seulement besoin d'une regex (pas de boucle nécessaire), et en utilisant les assertions limite de mot de \b, assurez-vous de ce match que des mots entiers.

Autres conseils

N'a pas essayé, mais \b devrait être le groupe de caractères que vous recherchez. De manuel PHP :

 \b   word boundary

Votre code serait alors ressembler à quelque chose comme ceci:

$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: semble que les gens sont mieux lotis en utilisant \ b, donc modifié en conséquence ce

vous devez ajouter \b (qui signifie limite de mot) à votre regex comme ceci:

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

Vous semblez avoir une faute de frappe dans votre code, soit parce que vous avez un support de fermeture littérale (et ne correspondent pas à une partie des mots) ou si vous avez un support de fermeture ouvert.

1. Vous pouvez utiliser "\ b" pour vérifier les limites de mots. Une limite de mot est défini comme étant la limite entre un caractère de mot et un caractère non-mot. mot-caractères sont des lettres, des chiffres et trait de soulignement.

2 Vous pouvez le faire d'un seul coup, en utilisant "|".

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top