2008-11-07 6 views

Répondre

1

Si vous utilisez Perl, ce que vous avez besoin est \b, alias "limite de mot":

m/\bkey\b/ 
+0

Je vais l'utiliser dans une requête MySQL. – Overbeeke

6

\bkey\b devrait faire ce que vous voulez.

\b est une limite de mot

+0

/apprend quelque chose de nouveau –

+0

Est-ce que ceci trouvera "_word_" ou "word4"? Les underscores et les nombres sont-ils des limites de mots? +1 ou la réponse de Pax Diablo, qui répond exactement à la question posée. –

7

Puisque vous ne spécifiez pas ce moteur regex que vous utilisez, je suppose une base de référence, auquel cas « [^A-Za-z]key[^A-Za-z] » serait suffisant. Si vous voulez également attraper la chaîne au début et à la fin de la ligne, vous devrez également utiliser "^key[^A-Aa-z]" et "[^A-Aa-z]key$".

+0

C'est la solution qui fonctionne dans une requête mysql: WHERE colonne REGEXP '[^ A-Za-z] clé [^ A-Za-z]', le mot boundary \ b ne fonctionne pas dans mysql. Merci! – Overbeeke

+0

Très apprécié - Je n'ai pas réalisé à partir de votre question que vous parliez de mysql. Maintenant tout ce que vous avez à faire est d'accepter la réponse :-). – paxdiablo

+0

Une question cependant. Un personnage est maintenant attendu avant la clé. Si la valeur de ma colonne commence par key alors la regex ne le trouve pas. Comment puis-je le rendre facultatif? – Overbeeke

1

Ou plus concise [^\w]key[^\w]

+0

Notez qu'en demandant un caractère non-mot avant et après "key", cela ne correspondra pas à "key" au début ou à la fin de la ligne. (L'absence d'un personnage n'est pas un caractère non-mot.) –

3

Cette question est taggés avec Je suppose que vous utilisez MySQL regexps. Alors [[:<:]]key[[:>:]] est ce que vous voulez. Voir le documentation at dev.mysql.com pour plus de détails.

0

Pas besoin de les OR s si vous le faites comme ceci:

(^|[^A-Za-z])key([^A-Za-z]|$) 
Questions connexes