문제

단락에 "중지 단어"가 포함되어 있는지 확인하면됩니다. 중지 단어는 아래 배열에 있습니다.

나는 다음과 같은 공식을 가지고 있었다.

$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'와 같은 단어는 중지 단어로 식별됩니다.

따라서 Regex는 이전 공간이 있거나 새 라인의 시작이어야하며 전체 정지/공간/쉼표/(다른 비 캐릭터 객체)로 끝납니다.

또한 중지 단어가 식별 되 자마자 PHP에 루프를 종료하라고 어떻게 알 수 있습니까?

감사합니다.

도움이 되었습니까?

해결책

사용 \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