2010-12-01 19 views
5

En analysant un tableau de commandes de chaînes, j'ai besoin de savoir si une chaîne contient un mot-clé spécifique.Comment trouver un mot entier dans une chaîne en PHP sans correspondance accidentelle?

Sons simples Je sais, mais le problème vient quand le mot-clé command peut aussi faire partie d'un autre mot.

Ex:

CHECKSOUND 
SOUND 
CHECK 

Je dois vérifier si la ligne actuelle a CHECKSOUND, SOUND ou commande CHECK.

Si j'utiliser quelque chose comme:

if(stristr($line,'SOUND') == true) 

Ensuite, il peut trouver CHECKSOUND avant SOUND et donc pas analysé correctement.

Question:

est-il un moyen de trouver une seule occurrence d'un mot tout comme le son et ignorer SOUND occurrence si trouvé dans le cadre d'un autre mot comme CHECKSOUND? Je suis sûr qu'il me manque quelque chose de simple ici.

Répondre

19

Vous pouvez utiliser une expression régulière pour atteindre facilement l'objectif.

Exemple # 2 de la documentation de preg_match:

/* The \b in the pattern indicates a word boundary, so only the distinct 
* word "web" is matched, and not a word partial like "webbing" or "cobweb" */ 
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
} 

Notez que l'exemple ci-dessus utilise le modificateur i, ce qui rend la recherche de cas "web" insensible.

+0

Excellente aide, merci. –