2010-12-03 55 views
2

Je dois écrire une regex pour correspondre au mot. Pour trouver le mot exact peut être fait en utilisant /\bword\b/ motif. Mais je veux le modèle pour trouver word, words, wording et ainsi de suite.Comment faire correspondre des mots avec un préfixe commun en PHP?

par exemple, je veux écrire un modèle pour trouver des termes account, accounting, accounts et accountant dans une chaîne de paragraphe.

Répondre

3

Pour correspondre à peu votre mot-clé éventuellement suivie s, ing , ant, vous pouvez utiliser:

/\b($word(?:|s|ing|ant))\b/i 

see it

Si vous souhaitez autoriser toutes les lettres en option comme suffixe, vous pouvez utiliser:

/\b($word\w*)\b/i 
+0

le deuxième pour toute variation a fonctionné pour moi. Merci. @andread \ w manquait au lieu de. dans votre modèle, de toute façon merci encore à tous – daron

+0

@daron: Vous êtes les bienvenus. Aussi puisque vous êtes nouveau à SO, je voudrais vous dire que vous pouvez accepter la réponse qui vous a le plus aidé en cliquant sur la bonne marque à côté de la réponse :) – codaddict

+0

je vais le faire merci – daron

1

Je pense que cela vous arrive là:

/\<word(|s|ing)\>/ 
0
\b(accounting|accounts|account)\b 
0

Je peux me tromper, mais je ne pense pas que "/\b*word*\b/" obtient mot, au lieu qu'il correspond en fait des choses comme '''''wor' ou ||worddddd|, si vous voulez mot et sa variante, essayez:

/\bword[^\b]+\b/i 
+0

ignorer les * i était en train d'essayer de mettre en gras le mot . votre solution au lieu de chercher un mot correspondait à tout après le premier match pour le mot. – daron

+0

édité, désolé que –

+1

'[^ \ b]' ne fonctionnera pas - '\ b' n'est pas interprété comme une limite de mot à l'intérieur d'une classe de caractères. La négation de '\ b' est' \ B', mais même cela ne fonctionnera pas ici - cela n'a aucun sens de répéter une assertion de longueur nulle, et bien sûr il ne sera jamais possible de faire correspondre un \ b' juste après un '\ B'. –