Pergunta

Apenas necessidade de ver se um parágrafo contém uma "palavra stop", as palavras de parada é em uma matriz abaixo.

Eu tive a fórmula como:

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

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

O que funciona bem o suficiente, mas para palavras curtas como 'pan' uma palavra como 'panko' é identificado como uma palavra stop.

Assim, a regex seria algo como ele tem que ter um espaço antes ou ser o início de uma nova linha e cada extremidade em um ponto final / espaço / vírgula / (outros objetos não caracteres).

Também como eu poderia dizer php para sair do loop, logo que uma palavra parada é identificado?

Obrigado rapazes, diminuindo aprendendo regex como eu ir!

Foi útil?

Solução

Use \b(preheat|minutes|stir|heat|put|bowl|pan)\b como seu regex. Dessa forma, você só precisa de um regex (sem looping necessário), e usando a palavra \b afirmações de contorno, você certificar-se de que apenas palavras inteiras corresponder.

Outras dicas

Você não tentei isso, mas \b deve ser o grupo de caracteres que você está procurando. Do PHP manual:

 \b   word boundary

Seu código seria então algo parecido com isto:

$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: Parece que as pessoas estão em melhor situação usando \ b, então mudou este conformidade

você precisa adicionar \b (que significa limite de palavra) para o seu regex assim:

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

Você parece ter um erro de digitação no seu código, porque ou você tem um colchete de fechamento literal (e não correspondem partes das palavras) ou você tem um colchete de fechamento aberto.

1. Você pode usar "\ b" para verificar se há limites de palavra. Um limite de palavra é definido como o limite entre um caractere de palavra e um caractere não-palavra. palavra-caracteres são letras, números e sublinhado.

2 Você pode fazer tudo de uma só vez, usando "|":.

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top