سؤال

فقط بحاجة لمعرفة ما إذا كانت فقرة تحتوي على "إيقاف كلمة"، فإن كلمات التوقف في صفيف أدناه.

كان لي الصيغة كما:

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

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

الذي يعمل جيدا بما فيه الكفاية ولكن بالنسبة للكلمات القصيرة مثل "عموم" كلمة مثل "panko" تم تحديدها ككلمة توقف.

لذلك سيكون Regex شيء مثله يجب أن يكون لديك مساحة قبل ذلك أو أن تكون بداية سطر جديد وإما ينتهي في إيقاف / مساحة / فاصلة كاملة / كائنات أخرى غير شخصية).

أيضا كيف يمكنني إخبار PHP بالخروج من الحلقة بمجرد تحديد كلمة الإيقاف؟

شكرا يا شباب، تباطؤ التعلم regex كما أذهب!

هل كانت مفيدة؟

المحلول

يستخدم \b(preheat|minutes|stir|heat|put|bowl|pan)\b كما regex الخاص بك. بهذه الطريقة، تحتاج فقط إلى regex واحد (لا حلقات ضرورية)، واستخدام \b تأكيدات حدود الكلمات، تأكد من تطابق الكلمات بأكملها فقط.

نصائح أخرى

لم تجرب هذا، ولكن \b يجب أن تكون مجموعة الأحرف التي تبحث عنها. من دليل PHP:

 \b   word boundary

سيكون رمزك بعد ذلك مثل هذا:

$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
  }
}

تحرير: يبدو أن الناس أفضل حالا باستخدام B، لذلك تغير هذا وفقا لذلك

تحتاج إلى إضافة \b (الذي يقف إلى حدود كلمة) إلى Regex الخاص بك مثل هذا:

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

يبدو أن لديك خطأ مطبعي في التعليمات البرمجية الخاصة بك، لأنه إما أن يكون لديك قوس إغلاق حرفي (ولا تتطابق مع أجزاء من الكلمات) أو لديك قوس إغلاق مفتوح.

1. يمكنك استخدام " B" للتحقق من حدود الكلمات. يتم تعريف حدود الكلمات على أنها الحدود بين حرف كلمة وحرف غير كلمة. كلمة أحرف هي الحروف والأرقام والتأكيد.

2. يمكنك القيام بذلك كل شيء في واحد، باستخدام "|":

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top