Pregunta

Sólo hay que ver si un párrafo contiene una "palabra única", las palabras vacías están en una matriz a continuación.

I tenía la 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;
      }
    }

Lo que funciona bastante bien, pero para las palabras cortas como 'pan' una palabra como 'panko' se identifica como una palabra de parada.

Así que la expresión regular sería algo así como que tiene que tener un espacio antes ni ser el comienzo de una nueva línea y cualquiera de los extremos en un punto final / espacio / coma / (otros objetos de caracteres).

También cómo podría decirle a PHP para salir del bucle, tan pronto como se identifique una palabra parada?

Gracias chicos, la desaceleración de expresiones regulares aprendiendo sobre la marcha!

¿Fue útil?

Solución

Uso \b(preheat|minutes|stir|heat|put|bowl|pan)\b como su expresión regular. De esta manera, sólo necesita una expresión regular (sin bucle es necesario), y mediante el uso de la palabra \b afirmaciones de contorno, se asegura de ese partido sólo palabras completas.

Otros consejos

No he probado esto, pero \b debe ser el grupo de caracteres que usted está buscando. Desde el rel="nofollow PHP Manual :

 \b   word boundary

Su código entonces se verá algo como esto:

$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 la gente es mejor usar \ b, por lo que en consecuencia cambiado esto

es necesario agregar \b (que significa límite de la palabra) a su expresión regular como esto:

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

Parece que tienes un error en su código, ya sea porque tiene un corchete de cierre literal (y no coinciden con las partes de las palabras) o si tiene una llave de cierre abierto.

1. Puede utilizar "\ b" para comprobar los límites de palabra. Un límite de palabra se define como el límite entre un carácter de palabra y un carácter no-palabra. palabras-caracteres son letras, números y guión bajo.

2 Puede hacerlo todo en una sola vez, mediante el uso de "|":.

$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top