2011-03-26 5 views
2

est-il un moyen rapide comment écrire egrep regex qui accepte quelque chose dans ce format:Regex correspondant uniquement chaîne sans préfixe alphanumérique

(certains caractères ou rien, mais pas des chiffres et des caractères de l'alphabet) noir

black and white 
    black is good color 
blackeverywhere 
9black cats 

il devrait accepter première et la deuxième ligne

EDIT: Peut-être que je devrais être plus précis, après le noir doit être quelques espaces et ne marche pas noir doivent être au début

c'est valide un

a i o black fdfd 

ce ne sont pas

ppooo pblack sdsdds 
iii blackdsdsd 

Répondre

0

Mise à jour sur la base de nouveaux exemples

Plus précisément:

(\s|^)black(\s|$)

  1. (\s|^) correspondre soit à un espace ou le début d'une nouvelle ligne
  2. black match de chaîne littérale
  3. (\s|$) correspondre soit à un espace ou à la fin de la ligne
+0

Il n'y a pas de chaîne que '\ s * 'ne correspondra pas, même les choses sans espaces du tout. Cela signifie que 9black sera apparié. Oops! Je ne pense pas que cette étoile soit ton amie. – tchrist

+0

Oups ma mauvaise. Enlevé le * :) –

0

Je pense:

(\s|^)black(\s|$) 

Cela doit correspondre à un espace ou rien au début, suivi d'un espace ou rien à la fin.

Il semble que vous vouliez simplement que le noir soit isolé dans la chaîne ... entouré par des espaces, des tabulations ou des retours à la ligne.

0

L'un d'eux pourrait fonctionner

/(^|[^a-zA-Z0-9])black(\s|$)/
/(^|[\W_])black(\s|$)/

2

Si je vous comprends bien

$ grep "\bblack\b" file 
black and white 
    black is good color 

$ ruby -ne 'print if /\bblack\b/' file