2010-10-18 5 views
0

Je cherche une expression régulière pour l'une de mes exigences particulières expliquées ci-dessous. Je crois que cela peut être très simple pour les experts en regex.Simple question d'expression régulière

Une expression régulière qui correspond à un ou plusieurs mots d'une ligne. Considérez cette ligne:

QRYNUMB0007 = SELECT EMPLOYEEID, FIRSTNAME, LASTNAME, EMAIL, CITY, STATE, COUNTRY FROM EMPLOYEE WHERE EMPLOYEEID = ? 

Dans ce cas, par exemple, je veux savoir si les mots que je suis à la recherche/recherche SELECT, PRENOM et EMPLOYÉ sont disponibles dans la même ligne . L'ordre d'apparition des mots dans la ligne n'est pas important dans ce cas, mais tous les 3 mots doivent être présents dans la même ligne.

+0

@eumiro: Comme je l'avais déjà dit dans ma question, ordre d'apparition des mots n'est pas important dans ce cas. – Gnanam

Répondre

2

Si vous voulez sélectionner l'un d'eux

/select|firstname|employee/i 

Si vous voulez réellement trouver tous

/select/i && /firstname/i && /employee/i 

Et, selon votre langue, les choses peuvent être plus simples, par exemple Python

STRING=mystring.lower() 
if "select" in STRING and "firstname" in STRING and "employee" in STRING: 
    print "...." 
+0

En fait, j'essaie d'utiliser cette expression régulière depuis l'éditeur Linux vi. J'ai une autre question ici, où EOL (fin de ligne) est spécifié dans cette expression? – Gnanam

1

Essayez alternation:

SELECT|FIRSTNAME|EMPLOYEE 

Eh bien, regexes ne soutiennent pas vraiment l'opérateur AND, comme d'autres ont dit. Puisque vous êtes dans vim, vous n'avez pas non plus accès à cet opérateur au niveau de la langue.

Vous pouvez permutations:

/SELECT.*FIRSTNAME.*EMPLOYEE|SELECT.*EMPLOYEE.*FIRSTNAME/ 

Ou bien, pour éviter des choses comme correspondant EMPLOYEEFIRSTNAME:

/SELECT.+FIRSTNAME.+EMPLOYEE|SELECT.+EMPLOYEE.+FIRSTNAME/ 
+0

édéric: Tous les 3 mots doivent être présents et pas l'un d'entre eux. – Gnanam