Вопрос

Просто нужно посмотреть, содержит ли абзац "стоп-слово", стоп-слова находятся в массиве ниже.

У меня была формула в виде:

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

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

Это работает достаточно хорошо, но для коротких слов, таких как "pan", слово, подобное "panko", идентифицируется как стоп-слово.

Таким образом, регулярное выражение было бы чем-то вроде того, что перед ним должен стоять пробел или быть началом новой строки и либо заканчиваться точкой / пробелом / запятой / (другие несимвольные объекты).

Также, как я мог бы сказать php выйти из цикла, как только будет определено стоп-слово?

Спасибо, ребята, замедляю изучение регулярных выражений по ходу дела!

Это было полезно?

Решение

Использование \b(preheat|minutes|stir|heat|put|bowl|pan)\b как ваше регулярное выражение.Таким образом, вам понадобится только одно регулярное выражение (без необходимости зацикливания), и с помощью \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 (что означает границу слова) к вашему регулярному выражению следующим образом:

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

Похоже, у вас опечатка в вашем коде, потому что либо у вас есть буквальная закрывающая скобка (и не совпадают части слов), либо у вас открытая закрывающая скобка.

1. Вы можете использовать "\b" для проверки наличия границ слов.Граница слова определяется как граница между словесным символом и несловесным символом.символы word- это буквы, цифры и подчеркивание.

2. Вы можете сделать все это за один раз, используя "|":

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top