Başka zor preg_match

4 Cevap php

Sadece bir paragraf, bir "Dur sözcüğü" içeriyorsa görmek gerekir, durdurma sözcükleri altında bir dizi vardır.

I formülü olarak oldu:

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

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

Hangi yeterince iyi çalışıyor ama 'panko' gibi 'pan', bir kelime gibi kısa kelimeler için bir durdurma kelime olarak tanımlanır.

Tam bir stop / alan / virgül / (diğer non karakter nesneler) de yeni bir satırın başlangıç ​​ve sonunu ya ondan önce bir boşluk var ya da olmak zorunda gibi pek regex şey olurdu.

Ayrıca ne ben en kısa sürede bir stop kelime tanımlanır gibi döngü çıkmak için php söyleyebilirdi?

Thanks guys, slowing learning regex as I go!

4 Cevap

Lütfen regex olarak \b(preheat|minutes|stir|heat|put|bowl|pan)\b kullanın. Bu şekilde, tek bir regex (Gerekli hiçbir loop) ihtiyaç ve \b kelime sınır iddiaları kullanarak, emin yalnızca tüm kelimeleri maç emin olun.

Bu denemedim, ama \b aradığınız karakter grubu olmalıdır. Kimden PHP manual:

 \b   word boundary

Kodunuzu daha sonra bu gibi bir şey olacaktır:

$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: insanlar \ b kullanarak daha iyi görünüyor, bu yüzden buna göre bu değişti

Bu gibi regex için (word sınırında anlamında) \b eklemeniz gerekir:

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

Değişmez bir kapanış ayraç var (ve sözcük parçaları eşleşmiyor) ya da açık bir kapanış dirseğini var ya, çünkü kodunuzda bir yazım hatası var gibi.

1. Sen sözcük sınırları denetlemek için "\ b" kullanabilirsiniz. Bir kelime sınır Sözcük karakteri olmayan bir sözcük karakteri arasındaki sınır olarak tanımlanır. kelime-harfler, sayılar ve alt çizgi vardır.

: | "" 2. Sen kullanarak, tek seferde hepsini yapabilirsiniz

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)